2010-02-08 12 views
78

-Code wird mehr erklären:In PHP wird 0 als leer behandelt?

$var = 0; 

if (!empty($var)){ 
echo "Its not empty"; 
} else { 
echo "Its empty"; 
} 

das Ergebnis zurück "Sein leer". Ich dachte, leer() würde prüfen, ob ich bereits die Variable und Wert innen haben. Warum es "Sein leeres" zurückgibt ??

+15

@steereo 'empty' ist vielleicht die nützlichste, aber weithin missverstandene PHP-Funktion. Erfahren Sie, wie und wann Sie es verwenden. – deceze

+2

@steero 'empty' ist im Wesentlichen kurz für' isset ($ var) && $ var! = False'. Sie müssen Ihre "leer" sehr seltsam halten, um sich damit in den Fuß zu schießen. ; P – deceze

+0

@stereo 1) Wo ist es "inkonsistent"? Es funktioniert wie es auf der Dose steht. 2) Wenn man eine Variable locker mit "false" vergleicht, ohne einen Fehler "undefined variable" auszulösen, ist das nutzlos? Naja, schätze, du machst das nie ... 3) Die Wahl der falschen Funktion in einem Sicherheitskontext bedeutet nicht, dass die Funktion selbst schlecht, nutzlos oder inkonsistent ist; Es bedeutet nur, dass jemand die falsche Funktion für den Job gewählt hat. – deceze

Antwort

116

http://php.net/empty

die folgenden Dinge werden als leer sein:

  • "" (ein leerer String)
  • 0 (0 als eine ganze Zahl)
  • "0" (0 als Zeichenkette)
  • NULL
  • FALSCH
  • array() (ein leeres Array)
  • var $ var; (Eine Variable deklariert, aber ohne einen Wert in einer Klasse)

Beachten Sie, dass dies genau die gleiche Liste wie für einen Zwang false zu Boolean. empty ist einfach !isset($var) || !$var. Versuchen Sie isset stattdessen.

+0

Also, ich muss wie folgt überprüfen: if (isset ($ var) && $ var! = 0) {Do Something} ?? – mysqllearner

+2

Versucht isset(), dasselbe Ergebnis – mysqllearner

+0

@mysql Für diesen Fall können Sie auch '! Empty ($ var)' verwenden, aber beachten Sie, dass das nicht das ist, was Sie in der Frage geschrieben haben.Was zu verwenden ist, hängt ganz davon ab, welche Werte Sie als "wahr" betrachten wollen. Vergleichen Sie einfach die Unterschiede zwischen 'isset' und' empty' und wählen Sie die richtige Kombination für die richtige Situation. – deceze

0

die folgenden Dinge werden als leer sein:

  • "" (ein leerer String)
  • 0 (0 als eine ganze Zahl)
  • "0" (0 als String)
  • NULL
  • FALSE
  • array() (ein leeres Array)
  • var $ var; (Eine Variable deklariert, aber ohne einen Wert in einer Klasse)

Von PHP Manual

In Ihrem Fall $var ist 0, so empty($var)true zurück, das Ergebnis sind negiert, bevor es zu testen, so dass die else Block läuft und gibt "Its empty" als Ausgabe aus.

2

empty() liefert wahr für alles, was FALSE auswertet, es ist eigentlich ein "nicht" (!) in Verkleidung. Ich denke du meinst isset()

1

Von manuell: Gibt FALSE zurück, wenn var einen nicht leeren und nicht Nullwert hat.

die folgenden Dinge werden als leer sein:

  • "" (ein leerer String)
  • 0 (0 als eine ganze Zahl)
  • "(als Zeichenfolge 0) NULL 0"
  • FALSE Array() (ein leeres Array) var
  • $ var; (Eine Variable deklariert, aber ohne einen Wert in einer Klasse)

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

55

Ich frage mich, warum niemand das extrem handliche Type comparison table vorgeschlagen. Es beantwortet alle Fragen zu den gemeinsamen Funktionen und vergleicht die Operatoren.

ein Ausschnitt:

Expression  | empty() 
----------------+-------- 
$x = "";  | true  
$x = null  | true  
var $x;   | true  
$x is undefined | true  
$x = array(); | true  
$x = false;  | true  
$x = true;  | false 
$x = 1;   | false 
$x = 42;  | false 
$x = 0;   | true  
$x = -1;  | false 
$x = "1";  | false 
$x = "0";  | true  
$x = "-1";  | false 
$x = "php";  | false 
$x = "true"; | false 
$x = "false"; | false 

Neben anderen cheatsheets, habe ich immer eine Hardcopy dieser Tabelle auf meinem Schreibtisch falls ich

4

Aus linguistischer Sicht nicht sicher bin leer hat eine Bedeutung von ohne Wert. Wie die anderen sagten, müssen Sie isset() verwenden, um zu überprüfen, ob eine Variable definiert wurde, was Sie tun. Eigentlich

0

isset nur prüfen, ob die Variablensätze oder not.In diesem Fall, wenn Sie überprüfen möchten, ob Ihre Variable wirklich Null ist oder leeren Sie dieses Beispiel verwenden können:

$myVar = ''; 
if (empty($myVar)) 
{ 
    echo "Its empty"; 
} 
echo "<br/>"; 

if ($myVar===0) 
{ 
    echo "also zero!"; 
} 

nur für notice $ myVar = = 0 verhält sich wie leere Funktion.

22

Bei numerischen Werten sollten Sie is_numeric Funktion:

$var = 0; 

if (is_numeric($var)) 
{ 
    echo "Its not empty"; 
} 
else 
{ 
    echo "Its empty"; 
} 
1
if (empty($var) && $pieces[$var] != '0') { 
//do something 
} 

In meinem Fall dieser Code gearbeitet.

+0

nicht für den Fall, dass der Wert float ist '' '0.0''' – ulkas

6

Verwenden Sie stattdessen strlen(). Ich lief auf das gleiche Problem mit 1/0 als mögliche Werte für einige Variablen. Ich verwende if (strlen($_POST['myValue']) == 0), um zu testen, ob in meiner Variablen ein Zeichen vorhanden ist oder nicht.

+0

fügen Sie einfach ein @strlen hinzu, um das Fehlerprotokoll auszulassen, nur für den Fall ... um kein großes Protokoll zu erstellen – Miguel

+0

Warum würden Sie' @ strlen' setzen. Solange Sie eine Variable übergeben, sollte sie keinen Fehler ausgeben. Wenn Ihr Strlen leer ist, wird der Wert als 0 aufgezeichnet. – sketchthat

+1

Wenn die Variable nicht gesetzt ist, werden Sie einen Fehler erhalten. –

7

Ich wurde vor kurzem mit meiner Hose auf diesem auch gefangen. Das Problem, mit dem wir uns oft beschäftigen, sind nicht gesetzte Variablen - sagen wir ein Formularelement, das vielleicht schon da war, aber für viele Elemente 0 (oder die Zeichenfolge '0', die genauer durch den Beitrag kommen würde, aber immer noch als " falsey ") ist ein legitimer Wert, sagen wir in einer Dropdown-Liste.

mit empty() und dann strlen() ist die beste am besten, wenn Sie diese auch benötigen, wie:

if(!empty($var) && strlen($var)){ 
    echo '"$var" is present and has a non-falsey value!'; 
} 
1

Um 0 als Wert in den variablen Einsatz zu akzeptieren isset

Überprüfen Sie, ob Variable leer ist

$var = 0; 

if ($var == '') { 
    echo "empty"; 
} else { 
    echo "not empty"; 
} 
//output is empty 

überprüfen Sie, ob Variable gesetzt

$var = 0; 

if (isset($var)) { 
    echo "not empty"; 
} else {  
    echo "empty"; 
} 
//output is not empty 
2

Es funktioniert für mich!

// 
if(isset($_POST['post_var'])&&$_POST['post_var']!==''){ 
echo $_POST['post_var']; 
} 

//results: 
1 if $_POST['post_var']='1' 
0 if $_POST['post_var']='0' 
skip if $_POST['post_var']='' 
0

leer sollte leer bedeuten .. was auch immer deceze sagt.

Als ich

$var = '';  
$var = '0'; 

erwarte ich, dass var_dump(empty($var)); falsch zurück.

Wenn Sie Dinge in einem Array überprüfen, müssen Sie immer zuerst tun.

0

Verwenden Sie nur ($_POST['input_field_name'])!=0 anstelle von !($_POST['input_field_name'])==0 dann wird 0 nicht als leer behandelt.

Verwandte Themen