Ich habe irgendwo gelesen, dass die isset()
Funktion eine leere Zeichenfolge als behandelt TRUE
und daher isset()
keine effektive Möglichkeit ist, Texteingaben und Textfelder aus einem HTML-Formular zu validieren.
Sie können also empty()
überprüfen, ob ein Benutzer etwas eingegeben hat.
Stimmt es, dass die
isset()
Funktion eine leere Zeichenfolge als behandeltTRUE
?In welchen Situationen sollte ich dann verwenden
isset()
? Sollte ich immer verwenden!empty()
, um zu überprüfen, ob etwas vorhanden ist?
Zum Beispiel statt
if(isset($_GET['gender']))...
Verwenden Sie dies
if(!empty($_GET['gender']))...
Antworten:
isset vs.! leer
Freihandelsabkommen:
quelle
empty()
Gibt auch true für ein leeres Array zurück.empty()
TRUE für 0 zurückgegeben wird, ist es keine gute Idee, diesen Operator für die Mathematik zu verwenden, falls "0" versehentlich eine Zeichenfolge ist. Dies kann gefährlich sein. Verwenden Sie stattdessen grundlegende>
,<
und==
Operatoren und convert Variablenintval()
oderfloatval()
.Im Allgemeinen:
isset
testet, ob eine Variable (oder ein Element eines Arrays oder eine Eigenschaft eines Objekts) vorhanden ist (und nicht null ist)empty
testet, ob eine Variable (...) nicht leere Daten enthält.Um Frage 1 zu beantworten :
gibt
Weil die Variable
$str
existiert.Und Frage 2 :
Sie sollten isset verwenden, um festzustellen, ob eine Variable vorhanden ist . Wenn Sie beispielsweise Daten als Array abrufen, müssen Sie möglicherweise überprüfen, ob ein Schlüssel in diesem Array vorhanden ist.
Denken Sie an
$_GET
/$_POST
, zum Beispiel.Nun, um an seinem Wert zu arbeiten, wenn Sie wissen, dass es einen solchen Wert gibt: das ist die Aufgabe von
empty
.quelle
Es ist auch keine gute Möglichkeit, nach gültigen Eingaben zu suchen.
isset()
ist nicht ausreichend, da - wie bereits erwähnt - eine leere Zeichenfolge als gültiger Wert betrachtet wird.! empty()
ist auch nicht ausreichend, weil es '0' ablehnt, was ein gültiger Wert sein könnte.Die Verwendung in
isset()
Kombination mit einer Gleichheitsprüfung für eine leere Zeichenfolge ist das absolute Minimum, das Sie benötigen, um zu überprüfen, ob ein eingehender Parameter einen Wert hat, ohne falsche Negative zu erstellen:Aber mit "absolutes Minimum" meine ich genau das. Der obige Code bestimmt lediglich, ob es einen Wert für gibt
$_GET['gender']
. Es ist nicht festzustellen , ob der Wert für$_GET['gender']
ist gültig (zB eines ).("Male", "Female",
"FileNotFound"
)
Siehe dazu die Antwort von Josh Davis .
quelle
isset
ist nur für Variablen und nicht nur für Werte vorgesehen undisset("foobar")
löst daher einen Fehler aus. Ab PHP 5.5empty
werden sowohl Variablen als auch Ausdrücke unterstützt.Also Ihre erste Frage sollte eher , wenn sein
isset
kehrt wahr für eine Variable , die eine leere Zeichenfolge enthält. Und die Antwort lautet:Die Typvergleichstabellen im PHP-Handbuch sind für solche Fragen sehr praktisch.
isset
Grundsätzlich wird geprüft, ob eine Variable einen anderen Wert als null hat, da nicht vorhandene Variablen immer den Wert null haben .empty
ist eine Art Gegenstück zuisset
, behandelt aber auch den ganzzahligen Wert0
und den Zeichenfolgenwert"0"
als leer. (Schauen Sie sich noch einmal die Typvergleichstabellen an .)quelle
empty()
PHP 5.5.0 auch "Ausdrücke und nicht nur Variablen unterstützt".Wenn Sie ein $ _POST ['param'] haben und davon ausgehen, dass es sich um einen Zeichenfolgentyp handelt, dann
ist identisch mit
quelle
Sie können dies umschreiben, da "isset () keine Möglichkeit ist, Eingaben zu validieren". Um Validieren Sie die Eingabe verwenden PHP Filter - Erweiterung .
filter_has_var()
Hier erfahren Sie, ob die Variable vorhanden ist, währendfilter_input()
die Eingabe tatsächlich gefiltert und / oder bereinigt wird.Beachten Sie, dass Sie nicht verwenden müssen , um
filter_has_var()
vorfilter_input()
und wenn Sie für eine Variable stellen , die nicht gesetzt ist,filter_input()
wird einfach zurückgebennull
.quelle
Wann und wie zu verwenden:
True für 0, 1, leere Zeichenfolge, eine Zeichenfolge, die einen Wert enthält, true, false
Falsch für null
z.B
False für 1, eine Zeichenfolge mit einem Wert, true
True für null, leere Zeichenfolge, 0, false, z
quelle
isset wird verwendet, um zu bestimmen, ob eine Instanz von etwas existiert, dh wenn eine Variable instanziiert wurde ... es geht nicht um den Wert des Parameters ...
Pascal MARTIN ... +1 ...
empty () generiert keine Warnung, wenn die Variable nicht vorhanden ist. Daher wird isset () bevorzugt, wenn Sie prüfen, ob eine Variable vorhanden ist, wenn Sie sie ändern möchten.
quelle
Verwenden
empty
ist genug:Wenn Sie einen ganzzahligen Wert wünschen, sollten Sie dies auch überprüfen
intval($variable) !== FALSE
.quelle
empty
...isset
/filter_has_var
muss verwendet werden, um zu überprüfen, ob var vorhanden ist.quelle
Ich bin hierher gekommen, um schnell zu überprüfen, ob eine Variable Inhalt enthält. Keine der Antworten hier lieferte eine vollständige Lösung, daher hier:
Es reicht zu überprüfen, ob die Eingabe
''
oder istnull
, weil:URL-
.../test.php?var=
Ergebnisse anfordern in$_GET['var'] = ''
URL-
.../test.php
Ergebnisse anfordern in$_GET['var'] = null
isset()
Gibtfalse
nur zurück, wenn die Variable existiert und nicht auf gesetztnull
ist. Wenn Sie sie also verwenden, erhalten Sietrue
leere Zeichenfolgen (''
).empty()
betrachtet beidesnull
und''
leer, aber es betrachtet auch'0'
leer, was in einigen Anwendungsfällen ein Problem darstellt.Wenn Sie
'0'
als leer behandeln möchten , verwenden Sieempty()
. Verwenden Sie andernfalls die folgende Prüfung:$var .'' !== ''
wirdfalse
nur für die folgenden Eingaben ausgewertet :''
null
false
Ich verwende die folgende Prüfung, um auch Zeichenfolgen mit nur Leerzeichen und Zeilenumbrüchen herauszufiltern:
quelle
Ich verwende Folgendes, um Benachrichtigungen zu vermeiden. Dadurch wird überprüft, ob die Variable in GET oder POST deklariert ist. Mit dem Präfix @ können Sie sicher überprüfen, ob sie nicht leer ist, und die Benachrichtigung vermeiden, wenn die Variable nicht festgelegt ist:
quelle
@
) sollte nicht ermutigt werden und ist für Ihr Snippet nicht erforderlich. Dies ist keine gute Antwort. Sie machen einen losen Vergleich. Sie können auch verwenden!empty()
.@
Wenn Sie Probleme beim Debuggen haben, ist die Auswirkung auf die Seite langsamer und Sie könnenerror_log
in einem Moment immer noch über 1 GB haben . Seien Sie smart und Verwendung!empty()
,!is_null()
oder so ähnlich.Mit isset () wird geprüft, ob die Variable mit dem Wert gesetzt ist oder nicht, und mit Empty () wird geprüft, ob eine bestimmte Variable leer ist oder nicht.
isset () gibt true zurück, wenn die Variable nicht null ist, während Empty () true zurückgibt, wenn die Variable eine leere Zeichenfolge ist.
quelle
Quelle: Php.net
quelle
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
quelle
isset () vs empty () vs is_null ()
quelle
! leer wird den Trick machen. Wenn Sie nur überprüfen müssen, ob Daten vorhanden sind oder nicht, können Sie mit isset other empty andere Validierungen durchführen
?>
quelle