it-swarm.com.de

php ist null oder leer?

Ich habe eine Frage zu NULL in PHP:

  $a = '';
  if($a == NULL) {
      echo 'is null';
  }

Warum sehe ich ist null wenn $a eine leere Zeichenfolge ist? Ist das ein Fehler?

162
Erin Tucker

Was Sie suchen, ist:

if($variable === NULL) {...}

PHP behandeltNULL, false , 0 und den empty - String als gleich.

289
Godwin

Wie in der folgenden Tabelle gezeigt, ist empty($foo) äquivalent zu $foo==null und is_null($foo) hat dieselbe Funktion wie $foo===null. Die Tabelle zeigt auch einige knifflige Werte bezüglich des null-Vergleichs. (ϕ bezeichnet eine nicht initialisierte Variable.)

Ich benutze niemals die Funktionen empty() und is_null(). Der einfache Vergleich ist weniger eindeutig, schneller und sauberer.  

         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   
198
PHPst

== gegen === überprüfen 

'' == NULL würde true zurückgeben
0 == NULL würde true zurückgeben
false == null würde true zurückgeben

wohingegen

'' === NULL würde falsch zurückgeben
0 === NULL würde falsch zurückgeben
false === NULL würde falsch zurückgeben

24
jancha

Nein, es ist kein Fehler. Schauen Sie sich die Loose-Vergleiche mit == table (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

Dort sehen Sie, dass eine leere Zeichenfolge "" im Vergleich zu false, 0, NULL oder "" den Wert true ergibt.

Möglicherweise möchten Sie is_nullverwenden. [docs] stattdessen oder strenger Vergleich (dritte Tabelle).

16
Felix Kling

Dieses ist kein Fehler, sondern normales Verhalten von PHP. Dies geschieht, weil der ==-Operator in PHP nicht nach Typ sucht. 

'' == null == 0 == false

Wenn Sie auch prüfen möchten, ob die Werte denselben Typ haben, verwenden Sie stattdessen ===. Lesen Sie bitte die offizielle Dokumentation .

12
Aurelio De Rosa

Wenn Sie == verwenden, behandelt php eine leere Zeichenfolge oder ein leeres Array als null. Um zwischen null und empty zu unterscheiden, verwenden Sie entweder === oder is_null. So:

if($a === NULL) oder if(is_null($a))

8
dayuloli

Verwenden Sie empty - http://php.net/manual/de/function.empty.php .

Beispiel:

$a = '';
if(empty($a)) {
    echo 'is empty';
}
0
ewizard