isset () und empty () – was zu verwenden ist

Mögliche Duplikate:
Warum überprüfe sowohl isset () als auch! Empty ()

Könnten Sie mir helfen, meinen Codierungsstil zu verbessern? 🙂 Bei einigen Aufgaben muss ich überprüfen – ist Variable leer oder enthält etwas. Um diese Aufgabe zu lösen, mache ich normalerweise folgendes.

Check – ist diese Variable gesetzt oder nicht? Wenn es eingestellt ist – ich überprüfe – es ist leer oder nicht?

 

Und ich habe eine Frage – sollte ich isset () vor leeren () – ist es notwendig? TIA!

Es hängt davon ab, was Sie suchen, wenn Sie nur schauen, ob es leer ist, verwenden Sie einfach empty wenn es prüft, ob es auch gesetzt ist, wenn Sie wissen wollen, ob etwas gesetzt ist oder nicht.

Empty überprüft, ob die Variable gesetzt ist und prüft sie auf Null, “”, 0, etc

Isset prüft nur, ob es gesetzt ist, es kann alles sein, was nicht null ist

Mit empty werden die folgenden Dinge als leer angesehen:

  • “” (eine leere Zeichenfolge)
  • 0 (0 als Ganzzahl)
  • 0.0 (0 als Gleitkommazahl)
  • “0” (0 als String)
  • NULL
  • FALSCH
  • array () (ein leeres Array)
  • var $ var; (Eine Variable deklariert, aber ohne einen Wert in einer class)

Von http://php.net/manual/en/function.empty.php


Wie in den Kommentaren erwähnt, ist das Fehlen einer Warnung auch wichtig bei leeren ()

PHP-Handbuch sagt

empty () ist das Gegenteil von (boolean) var, außer dass keine Warnung generiert wird, wenn die Variable nicht gesetzt ist .

In Bezug auf Isset

PHP-Handbuch sagt

isset () gibt FALSE zurück, wenn eine Variable getestet wird, die auf NULL gesetzt wurde


Ihr Code wäre in Ordnung als:

 < ?php $var = '23'; if (!empty($var)){ echo 'not empty'; }else{ echo 'is not set or empty'; } ?> 

Beispielsweise:

 $var = ""; if(empty($var)) // true because "" is considered empty {...} if(isset($var)) //true because var is set {...} if(empty($otherVar)) //true because $otherVar is null {...} if(isset($otherVar)) //false because $otherVar is not set {...} 

In Ihrem speziellen Fall: if ($var) .

Sie müssen isset wenn Sie nicht wissen, ob die Variable existiert oder nicht. Da Sie es jedoch in der allerersten Zeile deklariert haben, wissen Sie, dass es existiert, daher brauchen Sie nicht , isset , sollten Sie isset nicht verwenden.

Das gleiche gilt für empty , nur das empty kombiniert auch eine Überprüfung auf die Wahrheit des Wertes. empty ist äquivalent zu !isset($var) || !$var !isset($var) || !$var und !empty sind äquivalent zu isset($var) && $var oder isset($var) && $var == true .

Wenn Sie nur eine Variable testen wollen, die für Wahrheit existieren soll , if ($var) vollkommen ausreichend ist und zum Punkt.

Sie können einfach empty () verwenden – wie in der Dokumentation gezeigt , wird false zurückgegeben, wenn die Variable keinen Wert hat.

Ein Beispiel auf derselben Seite:

 < ?php $var = 0; // Evaluates to true because $var is empty if (empty($var)) { echo '$var is either 0, empty, or not set at all'; } // Evaluates as true because $var is set if (isset($var)) { echo '$var is set even though it is empty'; } ?> 

Sie können isset verwenden, wenn Sie nur wissen wollen, ob es nicht NULL ist. Ansonsten scheint es leer zu sein () ist in Ordnung, alleine zu verwenden.

Leer gibt true zurück, wenn die Variable nicht gesetzt ist. Aber isset gibt true zurück, selbst wenn die Variable nicht leer ist.

Hier sind die Ausgaben von isset() und empty() für die 4 Möglichkeiten: undeclared, null, false und true.

 $a=null; $b=false; $c=true; var_dump(array(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 previously undeclared var_dump(array(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 previously undeclared //array(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) [3]=> bool(true) } //array(4) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(false) } 

Sie werden feststellen, dass alle ‘isset’-Ergebnisse den “leeren” Ergebnissen entgegengesetzt sind, mit Ausnahme von case $b=false . Alle Werte (außer null, das kein Wert ist, sondern ein Nicht-Wert), die zu false ausgewertet werden, geben true zurück, wenn sie von isset und false getestet werden, wenn sie mit “leer” getestet werden.

Verwenden Sie also isset() wenn Sie über die Existenz einer Variablen besorgt sind. Und verwenden Sie empty wenn Sie für richtig oder falsch testen. Wenn die tatsächliche Art der Leere von Bedeutung ist, verwenden Sie is_null und ===0 , ===false , ==='' .

 $var = 'abcdef'; if(isset($var)) { if (strlen($var) > 0); { //do something, string length greater than zero } else { //do something else, string length 0 or less } } 

Dies ist ein einfaches Beispiel. Ich hoffe es hilft.

edit: isset hinzugefügt, isset eine Variable nicht wie oben definiert ist, würde dies zu einem Fehler führen, der überprüft, ob der erste Satz am wenigsten hilft, einige Kopfschmerzen zu beseitigen.