Ich habe eine Frage zu NULL
PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Warum sehe ich, dass null ist, wenn $a
eine leere Zeichenfolge ist? Ist das ein Fehler?
Was Sie suchen ist:
if($variable === NULL) {...}
Beachten Sie die ===
.
Bei der Verwendung ==
behandelt PHP wie Sie NULL , false , 0 , die leere Zeichenfolge und leere Arrays als gleich.
$variable
. Was Sie wollen, ist eigentlich:$variable == null
(beachten Sie die==
)== null
die leere Zeichenfolge übereinstimmte und nicht nur null oder undefiniert.$a = ''
ist leerstring
,false
ist boolesch,$a = 0;
ist eine ganze Zahl undnull
ist vom Typnull
. Was OP sagt, ist, dass PHP sie als "gleich" im Wert fädelt, aber nicht als "gleich" im Typ. Eine strenge===
Überprüfung prüft daher auch den Typ und schlägt fehl, wenn Sie andere verwenden. Aus diesem Grund sollten Sie bei Ihren Rückgabewerten konsistent sein. Wenn Sie normalerweise eine Zeichenfolge in einer Methode wie zurückgebengetName()
, sollten Sie diese nicht erhalten,null
wenn sie leer ist, sondern eher eine leere Zeichenfolge$user->getName() === ''
oder$user->getId() === 0
oder$user->isActive === false
. Vorgesehenes Verhalten!Wie in der folgenden Tabelle gezeigt,
empty($foo)
entspricht es$foo==null
undis_null($foo)
hat die gleiche Funktion von$foo===null
. Die Tabelle zeigt auch einige knifflige Werte bezüglich desnull
Vergleichs. (ϕ bezeichnet eine nicht initialisierte Variable.)Ich benutze
empty()
undis_null()
funktioniert nie . Die Verwendung eines einfachen Vergleichs ist weniger mehrdeutig, schneller und sauberer. Insbesondere gibt es weniger passende geschweifte Klammern.zB
if($x==null || $y==null)
vs.if(is_null($x) || is_null($y))
quelle
==null
und===null
.check
==
vs.===
'' == NULL
würde true zurückgeben0 == NULL
würde true zurückgebenfalse == null
würde true zurückgebenwohingegen
'' === NULL
würde false zurückgeben0 === NULL
würde false zurückgebenfalse === NULL
würde false zurückgebenquelle
Nein, es ist kein Fehler. Schauen Sie sich die Tabelle Lose Vergleiche mit == (zweite Tabelle) an, die das Ergebnis des Vergleichs jedes Werts in der ersten Spalte mit den Werten in den anderen Spalten zeigt:
Siehe Dort können Sie , dass eine leere Zeichenkette
""
verglichen mitfalse
,0
,NULL
oder""
nachgeben wahr.Möglicherweise möchten Sie stattdessen
is_null
[docs] oder einen strengen Vergleich (dritte Tabelle) verwenden.quelle
0
wenn sie in eine Zeichenfolge umgewandelt wird: codepad.org/qi40SG3E . Also(int)"php" == 0
.Dies ist kein Fehler, sondern ein normales PHP-Verhalten. Dies geschieht, weil der
==
Operator in PHP nicht nach Typ sucht.Wenn Sie auch überprüfen möchten, ob die Werte denselben Typ haben, verwenden Sie
===
stattdessen. Um diesen Unterschied eingehend zu untersuchen, lesen Sie bitte die offizielle Dokumentation .quelle
Wenn Sie verwenden
==
, behandelt PHP eine leere Zeichenfolge oder ein leeres Array alsnull
. Um zwischennull
und zu unterscheidenempty
, verwenden Sie entweder===
oderis_null
. So:if($a === NULL)
oderif(is_null($a))
quelle
PHP 7 isset () vs empty () vs is_null ()
quelle
Verwenden Sie
empty
- http://php.net/manual/en/function.empty.php .Beispiel:
quelle