Ich habe mich gefragt, was der Unterschied zwischen den beiden folgenden Fällen ist und welcher empfohlen wird?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
Ich habe mich gefragt, was der Unterschied zwischen den beiden folgenden Fällen ist und welcher empfohlen wird?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
Schi
Schauen Sie sich die an Vergleichstabelle für PHP-Typen.
Wenn Sie die Tabelle überprüfen, werden Sie feststellen, dass für alle Fälle empty($x)
ist das gleiche wie !$x
. Es kommt also darauf an, mit nicht initialisierten Variablen umzugehen. !$x
erstellt ein E_NOTICE
wohingegen empty($x)
nicht.
+1. Beachten Sie auch, dass dies dasselbe ist wie != [boolean result of evaluating $val]
also ist die letzte Spalte der ersten Tabelle meistens das, was Sie sich ansehen sollten.
– rockerest
22. August 2011 um 0:16 Uhr
Danke, das musste ich wissen. Also denke ich, dass empty($x) der sicherere Ansatz ist. Ich nehme an, der Unterschied ist in Bezug auf die Leistung vernachlässigbar, oder?
– Bachx
22. August 2011 um 0:24 Uhr
Bitte beachten Sie, dass bei Verwendung von empty() auf unzugängliche Objekteigenschaften die __isset-Überladungsmethode aufgerufen wird, falls deklariert.
– xdazz
22. August 2011 um 2:03 Uhr
Wenn Sie empty verwenden und die Variable nie gesetzt/erstellt wurde, wird keine Warnung/kein Fehler ausgegeben.
Felix Klinge
Mal sehen:
Die folgenden Dinge gelten als
empty
:
""
(eine leere Zeichenfolge)0
(0
als ganze Zahl)0.0
(0
als Schwimmer)"0"
(0
als Schnur)NULL
FALSE
array()
(ein leeres Array)var $var;
(eine deklarierte Variable, aber ohne Wert in einer Klasse)
Bei der Konvertierung in Boolean werden die folgenden Werte berücksichtigt
FALSE
:
- der boolesche Wert
FALSE
selbst- die Ganzzahl
0
(Null)- der Schwimmer
0.0
(Null)- die leere Zeichenfolge und die Zeichenfolge
"0"
- ein Array mit null Elementen
- ein Objekt mit null Mitgliedsvariablen (nur PHP 4)
- der besondere Typ
NULL
(einschließlich nicht gesetzter Variablen)SimpleXML
Objekte, die aus leeren Tags erstellt wurden
Es scheint, dass der einzige Unterschied (in Bezug auf den resultierenden Wert) darin besteht, wie a SimpleXML
Instanz behandelt wird. Alles andere scheint das gleiche Ergebnis zu liefern (wenn Sie natürlich die boolesche Umwandlung umkehren).
Also, was ist das Fazit? Aus der Liste scheint boolean die robustere Prüfung zu sein …
– Jason McCreary
22. August 2011 um 0:19 Uhr
Das ist falsch. Das verrät ein kurzer Test auf der PHP-Shell empty
Griffe leer SimpleXMLElement
Fälle wie !
tut; es ist einfach ein Fehler in der empty
Dokumentation, dass sie dort nicht erwähnt werden.
– Mark Amery
7. Juni 2015 um 22:19 Uhr
Ich muss die Vervielfältigung von doc lieben.
– Leonbloy
23. Februar 2019 um 19:43 Uhr