Ich habe eine Frage zu NULLPHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Warum sehe ich, dass null ist, wenn $aeine leere Zeichenfolge ist? Ist das ein Fehler?
Ich habe eine Frage zu NULLPHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Warum sehe ich, dass null ist, wenn $aeine 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.
== nulldie leere Zeichenfolge übereinstimmte und nicht nur null oder undefiniert.
$a = ''ist leer string, falseist boolesch, $a = 0;ist eine ganze Zahl und nullist 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, nullwenn sie leer ist, sondern eher eine leere Zeichenfolge $user->getName() === '' oder $user->getId() === 0oder $user->isActive === false. Vorgesehenes Verhalten!
Wie in der folgenden Tabelle gezeigt, empty($foo)entspricht es $foo==nullund is_null($foo)hat die gleiche Funktion von $foo===null. Die Tabelle zeigt auch einige knifflige Werte bezüglich des nullVergleichs. (ϕ 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))
==nullund ===null.
check ==vs.===
'' == NULLwürde true zurückgeben
0 == NULLwürde true zurückgeben
false == nullwürde true zurückgeben
wohingegen
'' === NULLwürde false zurückgeben
0 === NULLwürde false zurückgeben
false === NULLwü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, NULLoder ""nachgeben wahr.
Möglicherweise möchten Sie stattdessen is_null [docs] oder einen strengen Vergleich (dritte Tabelle) verwenden.
0wenn 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==)