Frage

EDIT: Ich meine Verwirrung glauben wahrscheinlich durch diesen Code am oberen Rand der Seite erstellt wird, in dem ich für den Wert der Option zu testen ... Dies erstellt eine Verknüpfung Methode, um die Option zu finden, ohne die get_option mit ( 'Option') Methode ...

global $options;
foreach ($options as $value) {
if (get_settings( $value['id'] ) === FALSE) { 
        $$value['id'] = $value['std']; 
    } else { 
        $$value['id'] = get_settings( $value['id'] );
    }
}

Und wenn ich also den Wert einer Variable, $ myvar, über eine Checkbox in meinem Thema Panel-Optionen aktiviert und klicken Sie auf Speichern, dann meine options.php in Worpdress sehen, wird der Wert der Variablen

true

Und wenn ich einen Nachschlag auf dieser Variable mit

if($myvar == "true")

Es geht.

Allerdings, wenn ich den Wert direkt über die aktualisierungs () -Methode, wie so ...

$mvar = true;
update_option('myvar', $myvar);

Der Wert ändert sich von true auf 1

Und wenn ich den gleichen Vergleich nach wie vor tun, wenn ($ myvar == „true“), ist es nicht jetzt. Es ist nicht mehr "true".

Was bin ich? (1) Warum ist „true“ und 1, nicht die gleiche Bewertung und (2) Was ist die update_option Methode auf den Wert von myvar tun, den Wert von true auf 1 zu ändern?

War es hilfreich?

Lösung

Versuchen

if($myvar == true)

und

$myvar = true;

TRUE und FALSE sind PHP in boolean Variablen aufgebaut, die als eine echte Saite viel universellere sind.


über die update_option. Es könnte nicht sein, dass die Option zum 1. Stattdessen ändert es sein könnte, dass der, wenn er sie in die Datenbank einfügen, sie es als String "true" einfügt. Dann, wenn es darum geht, wieder wird es in den Booleschen Wert true umgewandelt, das, wenn es gedruckt ist 1

Andere Tipps

Versuchen

if ($myvar)

Do not Test, ob die Dinge "gleich" wahr, sie sind entweder wahr oder sie sind es nicht.

Sie sollten Ihren ersten Test zu if($myvar == true) oder einfach if ($myvar) ändern. PHP hat einige seltsame Regeln für das, was „wahr“ ist; Im Allgemeinen evaulate Strings wahr, mit Ausnahme der besonderen Fälle von "0" und einer leeren Zeichenfolge "", welche Art Guss auf false gesetzt.

In Ihrem speziellen Beispiel if ($myvar == "true"):

  • Wenn $myvar einen boolean enthält, wird der Ausdruck auswerten als (bool) == (bool)"true" oder (bool) == true
  • Wenn $myvar enthält eine ganze Zahl, es Wurf in einen String und im Vergleich mit dem String „true“; so dass Ihr Test versagt, weil "1"! = "true".
  • Wenn $myvar einen String, String-Vergleich stattfindet, und plötzlich nur noch die Zeichenkette „true“ wird erfolgreich vergleichen.

Ich würde vermuten, 2. und 3. Fälle wirksam sind: Wordpress ist wahrscheinlich Einstellung $myval auf den String "true", wenn die von zurück gebucht, so dass Ihr Test besteht. Bei der manuell Sie boolean true angeben, muß Wordpress in einer ganzen Zahl konvertiert es sein, und dann integer Vergleich stattfindet, und nicht, weil die ganze Zahl 1 wird auf Zeichenfolge "1" wenn gegen "true" verglichen gegossen wird.

Sie machen einen lockeren Vergleich zwischen der Zahl 1 und der String ‚true‘. Für diese PHP wird die Zeichenfolge in eine Zahl übersetzen. 'Test' als Nummer ist 0:

var_dump((int) 'true'); // int(0)

Und da 0 nicht gleich 1 ist, wird der Vergleich falsch zurück.

Wie einige andere Antworten schon richtig darauf hingewiesen, sollten Sie testen gegen die boolean wörtlich TRUE oder true. Wenn ein Operator in einer Gleichheitsprüfung ein boolean ist, wird PHP den anderen Operator in einen Booleschen konvertieren zu, die für die Zahl 1, geben

var_dump((bool) 1); // boolean(true)

Und dann Ihr Test vergehen, denn wahr ist gleich wahr.

Schauen Sie sich die Typ Vergleichstabelle zu verstehen, wie PHP jongliert Typen, wenn Prüfung auf Gleichheit .

Wie für das, was check_update nicht zu Ihrem boolean Besuchen der Funktionsbeschreibung :

  

(gemischt) (erforderlich) Der neue Wert für diese Option Namen. Dieser Wert kann ein String, ein Array, ein Objekt oder ein serialisierte Wert.

Also, keine boolean erlaubt. Ich habe kurz versucht, von dem, um herauszufinden, Sourcecode , wo die Umwandlung stattfindet, aber da WP ein Chaos zu mir ist, konnte sie nicht finden. Wie jemand anderes vorgeschlagen, ist es wahrscheinlich passiert, wenn es in die Datenbank zu speichern und es dann immer wieder.

"true" ist eine Zeichenfolge, und alle Saiten evaulates auf die logische 1 (versuchen Casting (bool) $string. true auf der anderen Seite, ohne Anführungszeichen, ist ein boolean und wird auf 1 bewerten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top