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

105

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

Prüfen - ist diese Variable gesetzt oder nicht? Wenn es eingestellt ist - ich überprüfe - ist es leer oder nicht?

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

Und ich habe eine Frage - sollte ich isset () vor empty () verwenden - ist das notwendig? TIA!

Dmitry Belaventsev
quelle
leer ist! isset ($ var) || $ var == false
zloctb
2
In meiner Meinung ist leer () eine schreckliche Entwicklung von PHP. Da "0" in jeder Form als "leer" betrachtet wird, können Sie in schlechte Fallen geraten, die viel Debugging-Zeit kosten. Ich würde sagen: Vermeiden Sie um jeden Preis und schreiben Sie die Logik einfach selbst
John

Antworten:

142

Es hängt davon ab, wonach Sie suchen. Wenn Sie nur sehen emptymöchten, ob es leer ist, verwenden Sie einfach, um zu prüfen, ob es ebenfalls festgelegt ist, und ob Sie wissen möchten, ob etwas festgelegt ist oder nicht isset.

Empty prüft, ob die Variable gesetzt ist und ob sie auf null, "", 0 usw.

Isset prüft nur, ob es gesetzt ist, es könnte alles sein, was nicht null ist

Mit emptywerden folgende Dinge als leer betrachtet:

  • "" (eine leere Zeichenfolge)
  • 0 (0 als Ganzzahl)
  • 0,0 (0 als Schwimmer)
  • "0" (0 als Zeichenfolge)
  • NULL
  • FALSCH
  • array () (ein leeres Array)
  • var $ var; (eine deklarierte Variable, jedoch ohne Wert in einer Klasse)

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


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

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 
 {...}
Pez Cuckow
quelle
Es ist gemein - im obigen Code überprüfe ich, ob die Variable gesetzt ist oder nicht zweimal? :)
Dmitry Belaventsev
Überprüfen Sie einfach, ob es leer ist, PHP wird keinen Fehler auslösen, wenn dies nicht der Fall ist.
Pez Cuckow
3
Sie lassen den größten Punkt aus empty: Es wird keine Warnung ausgegeben, wenn die getestete Variable nicht vorhanden ist. Das ist der springende Punkt dieser Funktion, ansonsten ist sie identisch mit == false.
Täuschung
1
Die Tatsache im Handbuch, dass "keine Warnung generiert wird, wenn die Variable nicht gesetzt ist", hat mich verwirrt. Keine Warnung bedeutet nicht, dass ich im folgenden Code keine Probleme haben werde. Jetzt ist es mir klar. Vielen Dank!
Dmitry Belaventsev
"isset prüft nur, ob es gesetzt ist, es könnte immer noch null sein" Das ist nicht wahr: Bei isseteiner null (und vorhandenen) Variablen wird ausgewertet false.
Netcoder
12

In Ihrem speziellen Fall : if ($var).

Sie müssen verwenden, issetwenn Sie nicht wissen, ob die Variable vorhanden ist oder nicht. Da Sie es jedoch in der ersten Zeile deklariert haben, wissen Sie, dass es existiert, daher müssen Sie es nicht verwenden isset.

Das gleiche gilt empty, nur dass emptyauch eine Überprüfung der Wahrhaftigkeit des Wertes kombiniert wird. emptyist äquivalent zu !isset($var) || !$varund !emptyäquivalent zu isset($var) && $varoder isset($var) && $var == true.

Wenn Sie nur eine Variable testen möchten, die für die Wahrhaftigkeit existieren sollte , if ($var)ist dies vollkommen ausreichend und auf den Punkt.

täuschen
quelle
Dieser erklärt viel viel besser. Wenn wir einen Vergleich für alle anderen Fälle wie diesen erhalten !empty is equivalent to isset($var) && $var, wäre das großartig. Danke @deceze
Vir
6

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 möchten, ob es nicht NULL ist. Ansonsten scheint es leer zu sein () ist in Ordnung, es alleine zu benutzen.

chris
quelle
Erklärung für die Abwahl? Er fragt nicht, ob sie gleich sind, er fragt, ob er isset überprüfen muss, bevor er leer prüft.
chris
Ich habe nicht abgelehnt, aber "isset verwenden, wenn du wissen willst, dass es nicht null ist" ist nicht korrekt : $var = null; isset( $var ) == true.
JJJ
Aus dem PHP5 / 4-Handbuch: isset () - "Bestimmen Sie, ob eine Variable gesetzt und nicht NULL ist." us.php.net/manual/en/function.isset.php
chris
2

Hier sind die Ausgaben von isset()und empty()für die 4 Möglichkeiten: nicht deklariert, null, falsch und wahr.

$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 mit Ausnahme des Falls den' leeren 'Ergebnissen entgegengesetzt sind $b=false. Alle Werte (außer null, bei denen es sich nicht um einen Wert, sondern um einen Nichtwert handelt), die als falsch ausgewertet werden, geben true zurück, wenn sie von getestet werden, issetund false, wenn sie von 'leer' getestet werden.

Verwenden isset()Sie diese Option, wenn Sie über die Existenz einer Variablen besorgt sind. Und verwenden emptySie, wenn Sie auf wahr oder falsch testen. Wenn die tatsächliche Art der Leere Angelegenheiten, Verwendung is_nullund ===0, ===false, ===''.

dnagirl
quelle
1

Empty gibt true zurück, wenn die Variable nicht festgelegt ist. Isset gibt jedoch true zurück, auch wenn die Variable nicht leer ist.

Schneebesen
quelle
-3
$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.

Bearbeiten: issetWird hinzugefügt, falls eine Variable nicht wie oben definiert ist, würde dies einen Fehler verursachen. Wenn Sie prüfen, ob der erste Satz mindestens dazu beiträgt, einige Kopfschmerzen zu beseitigen.

Akos
quelle
7
strlen unter Null? Ich möchte diese Saite sehen.
Täuschung
@deceze Nur ein grobes Beispiel :) OK use = 0 not <0
Akos