Beim Versuch, sich mit if
statement in PHP vertraut zu machen, ist dies passiert.
Zum ersten Mal habe ich diesen Code unten versucht.
Und die Ausgabe war true
, wenn die Bedingung true
ist. Wenn die Bedingung false
( if(false)
) lautet, wird wieder false
angezeigt.
Aber ich habe das gleiche versucht, indem ich eine Variable als Bedingung verwende, während ich den Wert der Variablen ändere.
%Vor% In dieser Situation ist die Ausgabe true
, auch wenn der Variablenwert false
oder true
ist. Gleichzeitig funktioniert if statement
gut, wenn 1
und 0
anstelle von true
und false
verwendet wird. Warum passiert das?
PHP macht einige hinterhältige Dinge im if-Ausdruck. Die folgenden Werte werden als FALSE betrachtet:
Jeder andere Wert wird als TRUE (einschließlich einer Ressource) betrachtet.
Sie übergeben tatsächlich eine Zeichenfolge, die das Wort "false" enthält, und nicht den Wert "false". Da dies nicht in der obigen Liste ist, wird es tatsächlich als wahr betrachtet!
Das 'false'
ist eine gültige Zeichenfolge, die nicht Boolean FALSE
ist, genau wie $con='hi';
nicht.
Um aus dem Handbuch
zu zitierenUm ein boolesches Literal anzugeben, verwenden Sie die Konstanten TRUE oder FALSE. Beide sind case-insensitive.
Lesen Sie auch diese anderen Optionen, die Sie haben
Bei der Konvertierung in boolean werden die folgenden Werte als FALSE betrachtet:
◦ der boolesche FALSE selbst
◦ die ganze Zahl 0 (null)
◦ der Float 0.0 (Null)
◦ die leere Zeichenfolge und die Zeichenfolge "0"
◦ ein Array mit Nullelementen
◦ ein Objekt mit null Membervariablen (nur PHP 4)
◦ der spezielle Typ NULL (einschließlich nicht gesetzter Variablen)
◦ SimpleXML-Objekte, die aus leeren Tags erstellt wurden
Dann hast du das beobachtet
Gleichzeitig funktioniert die if-Anweisung gut, wenn 1 und 0 anstelle von wahr und falsch verwendet werden. Warum passiert das?
Dies liegt daran, dass 0 in irgendeiner Form FALSE ist, entweder String oder numerisch. Aber der Text false
als String ist aus den oben genannten Gründen nicht falsch.
Lesen Sie auch über PHP Strenge Vergleiche , da Sie gerade lernen, weil
%Vor%Wie im Abschnitt über Ausdrücke beschrieben, wird Ausdruck auf seinen booleschen Wert ausgewertet. Wenn der Ausdruck TRUE ergibt, führt PHP eine Anweisung aus, und wenn sie als FALSE ausgewertet wird, wird sie ignoriert. Weitere Informationen darüber, welche Werte zu FALSE ausgewertet werden, finden Sie in der 'Umwandlung in booleschen' Abschnitt.
So wie in der Dokumentation versuchen Sie es mit
%Vor%Bei der Konvertierung in boolean werden die folgenden Werte als FALSE betrachtet:
◦ der boolesche FALSE selbst
◦ die ganze Zahl 0 (null)
◦ der Float 0.0 (Null)
◦ die leere Zeichenfolge und die Zeichenfolge "0"
◦ ein Array mit Nullelementen
◦ ein Objekt mit null Membervariablen (nur PHP 4)
◦ der spezielle Typ NULL (einschließlich nicht gesetzter Variablen)
◦ SimpleXML-Objekte, die aus leeren Tags erstellt wurden
Sie verwenden 'false' als STRING Variable, aber das ist das WORD false, nicht die BOOLEAN Konstante. Verwenden Sie einfach false
%Vor%Und wenn Sie if-Anweisungen machen, wird dies funktionieren:
%Vor%oder Sie können a === verwenden, die einen Ausdruck mit einem anderen nach Wert und nach Typ vergleicht.
%Vor%Verwenden Sie eine Bool anstelle einer Zeichenfolge:
%Vor%Ihre if-Anweisung überprüft einfach, ob $ con nicht leer ist. In Ihrem Beispiel wird es also immer wahr sein.
In Ihrem zweiten Beispiel ist $con
nicht die boolesche false
, es ist ein Zeichenfolgenliteral 'false'
(notieren Sie die Anführungszeichen), und jede nicht leere Zeichenfolge in PHP wird als ausgewertet true
.
Um das Problem zu beheben, löschen Sie einfach die Anführungszeichen:
%Vor% 'false'
ist nicht dasselbe wie false
.
if('true')
oder if('false')
ergeben immer true
, da sie als string
s behandelt werden und zum Vergleich konvertiert werden.
Gibt false
Tags und Links php if-statement