Warum sollten Sie sowohl isset () als auch! Empty () überprüfen?
269
Gibt es einen Unterschied zwischen issetund !empty. Wenn ich diese doppelte boolesche Prüfung durchführe, ist sie auf diese Weise korrekt oder redundant? und gibt es einen kürzeren Weg, um dasselbe zu tun?
Die offensichtlichen genauen Ergänzungen sind isset und is_null, aber! Leer deckt einige verschiedene ab. Es hängt alles von der Art der Daten ab, auf die Sie testen.
Jeff Clayton
Antworten:
419
Dies ist völlig überflüssig. emptyist mehr oder weniger Abkürzung für !isset($foo) || !$foound !emptyist analog zu isset($foo) && $foo. Dh emptymacht das Gegenteil von issetplus eine zusätzliche Überprüfung auf die Wahrhaftigkeit eines Wertes.
Mit anderen Worten, emptyist dasselbe wie !$foo, gibt jedoch keine Warnungen aus, wenn die Variable nicht vorhanden ist. Das ist der Hauptpunkt dieser Funktion: Führen Sie einen booleschen Vergleich durch, ohne sich Gedanken über die gesetzte Variable zu machen.
Aber wenn es keine gibt, wird $vars[1]er benachrichtigt.
Karim79
6
Ich habe keine Ahnung, woher ich diese Idee habe. Plus man würde.
Karim79
8
@karim IMO emptyist eine der am meisten missverstandenen Funktionen in PHP. Der winzige Ausschnitt über "Es wird keine Warnung generiert" ist sehr leicht zu übersehen. Ich musste die Dokumentation einige Male selbst scannen, um sie zu finden und hier zu veröffentlichen.
Täuschung
2
empty($vars[1])verursacht keine Warnungen auch $vars[1]ist nicht gesetzt, wird aber echo $vars[1]. Ich habe die Tatsache mit überprüft echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;.
Amil Waduwawara
4
@ Shahor Viele Sprachen betrachten 0als false. PHP ist nicht der einzige. Ich bin mir immer noch nicht sicher, was Ihre Beschwerde ist.
Täuschung
33
isset() testet, ob eine Variable gesetzt und nicht null ist:
Sie werden einige ziemlich unangenehme und schwer zu debuggende Fehler erstellen, wenn Sie diesen Weg gehen. Versuchen Sie beispielsweise, diesen Code auszuführen:
Die akzeptierte Antwort deutet in keiner Weise darauf hin, dass dies issetgleichbedeutend ist mit !empty.
Täuschung
8
$a =0;if(isset($a)){//$a is set because it has some value ,eg:0
echo '$a has value';}if(!empty($a)){//$a is empty because it has value 0
echo '$a is not empty';}else{
echo '$a is empty';}
Sie haben jedoch keine Variable behandelt, bei der kein Fall festgelegt wurde.
Amil Waduwawara
3
Nur leer prüfen, ob die referenzierte Variable / das referenzierte Array einen Wert hat. Wenn Sie das PHP-Dokument (leer) überprüfen, werden Sie feststellen, dass diese Dinge als leer gelten
*""(an empty string)*0(0as an integer)*"0"(0as a string)* NULL* FALSE* array()(an empty array)*var $var;(a variable declared, but without a valuein a class)
Es wird keine Warnung generiert, wenn die Variable nicht vorhanden ist. Das bedeutet, dass empty () im Wesentlichen das prägnante Äquivalent zu! Isset ($ var) || ist $ var == false.
Dies war bei keiner PHP-Version erforderlich, da leer bereits nach (nicht) isset sucht. Sie verwechseln die Tatsache, dass leer jetzt Ausdrücke mit der Frage unterstützt.
Alxgb
Es ist erst fünf Jahre später wahr.
Lennon
2
isset($vars[1]) AND !empty($vars[1])ist äquivalent zu !empty($vars[1]).
Ich habe einfachen Code vorbereitet, um ihn empirisch darzustellen.
"Leer": Funktioniert nur mit Variablen. Leer kann für verschiedene Variablentypen unterschiedliche Bedeutungen haben (siehe Handbuch: http://php.net/manual/en/function.empty.php ).
"isset": Überprüft, ob die Variable vorhanden ist und ob ein wahrer NULL- oder ein falscher Wert vorliegt. Kann durch Aufrufen von "nicht gesetzt" deaktiviert werden. Überprüfen Sie noch einmal das Handbuch.
Die Verwendung eines der beiden Variablen hängt vom verwendeten Variablentyp ab.
Ich würde sagen, es ist sicherer, nach beiden zu suchen, da Sie zunächst prüfen, ob die Variable vorhanden ist und ob sie nicht wirklich NULL oder leer ist.
@szahn "sicherer für beide zu überprüfen", - Sie als Programmierer können alles überprüfen, was Sie für die Sicherheit wollen. Wenn Ihr Code jedoch redundant ist, können Sie als Programmierer redundant sein.
Madlopt
0
Wenn wir dieselbe Seite zum Hinzufügen / Bearbeiten über die Schaltfläche "Senden" wie unten verwenden
bcoz edit_idwird ständig festgelegt, ob es sich um eine Seite zum Hinzufügen oder Bearbeiten handelt. Stattdessen sollten wir die unten stehende Bedingung verwenden
Der vorherige Beitrag wurde eingereicht, weil ich versehentlich die Eingabetaste drücke. Hier ist meine vollständige Antwort. Warum abstimmen? :(
diEcho
0
Von der PHP-Website unter Bezugnahme auf die empty()Funktion:
Gibt zurück, FALSEwenn der varWert nicht leer und nicht Null ist.
Das ist gut zu wissen. Mit anderen Worten, bei Verwendung der Funktion wird alles von NULLbis 0nach "" zurückgegeben .TRUEempty()
Hier ist die Beschreibung dessen, was die isset()Funktion zurückgibt:
Gibt zurück, TRUEfalls varvorhanden; FALSEAndernfalls.
Mit anderen Worten, nur Variablen, die nicht existieren (oder Variablen mit strengen NULLWerten), werden FALSEfür die isset()Funktion zurückgegeben. Alle Variablen, die einen beliebigen Wert haben, sei es 0eine leere Textzeichenfolge usw., werden zurückgegeben TRUE.
Antworten:
Dies ist völlig überflüssig.
empty
ist mehr oder weniger Abkürzung für!isset($foo) || !$foo
und!empty
ist analog zuisset($foo) && $foo
. Dhempty
macht das Gegenteil vonisset
plus eine zusätzliche Überprüfung auf die Wahrhaftigkeit eines Wertes.Mit anderen Worten,
empty
ist dasselbe wie!$foo
, gibt jedoch keine Warnungen aus, wenn die Variable nicht vorhanden ist. Das ist der Hauptpunkt dieser Funktion: Führen Sie einen booleschen Vergleich durch, ohne sich Gedanken über die gesetzte Variable zu machen.Das Handbuch drückt es so aus:
Sie können einfach
!empty($vars[1])
hier verwenden.quelle
$vars[1]
er benachrichtigt.empty
ist eine der am meisten missverstandenen Funktionen in PHP. Der winzige Ausschnitt über "Es wird keine Warnung generiert" ist sehr leicht zu übersehen. Ich musste die Dokumentation einige Male selbst scannen, um sie zu finden und hier zu veröffentlichen.empty($vars[1])
verursacht keine Warnungen auch$vars[1]
ist nicht gesetzt, wird aberecho $vars[1]
. Ich habe die Tatsache mit überprüftecho $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
.0
alsfalse
. PHP ist nicht der einzige. Ich bin mir immer noch nicht sicher, was Ihre Beschwerde ist.isset()
testet, ob eine Variable gesetzt und nicht null ist:http://us.php.net/manual/en/function.isset.php
empty()
kann true zurückgeben, wenn die Variable auf bestimmte Werte gesetzt ist:http://us.php.net/manual/en/function.empty.php
Um dies zu demonstrieren, versuchen Sie den folgenden Code, wobei $ the_var nicht zugewiesen, auf 0 und auf 1 gesetzt ist.
quelle
Die akzeptierte Antwort ist nicht korrekt.
isset () entspricht NICHT ! empty ().
Sie werden einige ziemlich unangenehme und schwer zu debuggende Fehler erstellen, wenn Sie diesen Weg gehen. Versuchen Sie beispielsweise, diesen Code auszuführen:
https://3v4l.org/J4nBb
quelle
isset
gleichbedeutend ist mit!empty
.quelle
Nur leer prüfen, ob die referenzierte Variable / das referenzierte Array einen Wert hat. Wenn Sie das PHP-Dokument (leer) überprüfen, werden Sie feststellen, dass diese Dinge als leer gelten
während isset prüfe ob die Variable isset und nicht null ist, die auch im php doc (isset) zu finden ist
quelle
Es ist nicht erforderlich.
php.net
quelle
isset($vars[1]) AND !empty($vars[1])
ist äquivalent zu!empty($vars[1])
.Ich habe einfachen Code vorbereitet, um ihn empirisch darzustellen.
Die letzte Zeile ist eine undefinierte Variable.
Und Code
Undefinierte Variablen müssen außerhalb der Funktion ausgewertet werden, da die Funktion selbst eine temporäre Variable im Bereich selbst erstellt.
quelle
"Leer": Funktioniert nur mit Variablen. Leer kann für verschiedene Variablentypen unterschiedliche Bedeutungen haben (siehe Handbuch: http://php.net/manual/en/function.empty.php ).
"isset": Überprüft, ob die Variable vorhanden ist und ob ein wahrer NULL- oder ein falscher Wert vorliegt. Kann durch Aufrufen von "nicht gesetzt" deaktiviert werden. Überprüfen Sie noch einmal das Handbuch.
Die Verwendung eines der beiden Variablen hängt vom verwendeten Variablentyp ab.
Ich würde sagen, es ist sicherer, nach beiden zu suchen, da Sie zunächst prüfen, ob die Variable vorhanden ist und ob sie nicht wirklich NULL oder leer ist.
quelle
Wenn wir dieselbe Seite zum Hinzufügen / Bearbeiten über die Schaltfläche "Senden" wie unten verwenden
dann sollten wir nicht verwenden
bcoz
edit_id
wird ständig festgelegt, ob es sich um eine Seite zum Hinzufügen oder Bearbeiten handelt. Stattdessen sollten wir die unten stehende Bedingung verwendenquelle
empty()
Funktion:Gibt zurück,
FALSE
wenn dervar
Wert nicht leer und nicht Null ist.Das ist gut zu wissen. Mit anderen Worten, bei Verwendung der Funktion wird alles von
NULL
bis0
nach "" zurückgegeben .TRUE
empty()
isset()
Funktion zurückgibt:Gibt zurück,
TRUE
fallsvar
vorhanden;FALSE
Andernfalls.Mit anderen Worten, nur Variablen, die nicht existieren (oder Variablen mit strengen
NULL
Werten), werdenFALSE
für dieisset()
Funktion zurückgegeben. Alle Variablen, die einen beliebigen Wert haben, sei es0
eine leere Textzeichenfolge usw., werden zurückgegebenTRUE
.quelle