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?
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?
Antworten:
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.
== null
die leere Zeichenfolge übereinstimmte und nicht nur null oder undefiniert.
$a = ''
ist leer string
, false
ist boolesch, $a = 0;
ist eine ganze Zahl und null
ist vom Typ null
. 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ückgeben getName()
, 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
und is_null($foo)
hat die gleiche Funktion von $foo===null
. Die Tabelle zeigt auch einige knifflige Werte bezüglich des null
Vergleichs. (ϕ bezeichnet eine nicht initialisierte Variable.)
empty is_null
==null ===null isset array_key_exists
ϕ | T | T | F | F
null | T | T | F | T
"" | T | F | T | T
[] | T | F | T | T
0 | T | F | T | T
false | T | F | T | T
true | F | F | T | T
1 | F | F | T | T
\0 | F | F | T | T
Ich benutze empty()
und is_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))
==null
und ===null
.
check ==
vs.===
'' == NULL
würde true zurückgeben
0 == NULL
würde true zurückgeben
false == null
würde true zurückgeben
wohingegen
'' === NULL
würde false zurückgeben
0 === NULL
würde false zurückgeben
false === NULL
würde false zurückgeben
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:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
Siehe Dort können Sie , dass eine leere Zeichenkette ""
verglichen mit false
, 0
, NULL
oder ""
nachgeben wahr.
Möglicherweise möchten Sie stattdessen is_null
[docs] oder einen strengen Vergleich (dritte Tabelle) verwenden.
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.
'' == null == 0 == false
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 .
Verwenden Sie empty
- http://php.net/manual/en/function.empty.php .
Beispiel:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable
. Was Sie wollen, ist eigentlich:$variable == null
(beachten Sie die==
)