2012-04-03 7 views
3

Mögliche Duplizieren:
Reference - What does this symbol mean in PHP?
Getting confused with empty, isset, !empty, !issetWas bedeutet das Ausrufezeichen in PHP?

In PHP Was ist der Unterschied zwischen:

if(!isset) 
if(isset) 

Same mit if(!empty) und if(empty)?

Was bedeutet das "!" Zeichen bedeuten?

+1

'if (isset ($ test) === false)' und 'if (isset ($ test)!)' Sind gleichwertig. – MetalFrog

+4

Vorschlag: Lesen Sie die Dokumente auf [empty] (http://us.php.net/manual/en/function.empty.php) und [isset] (http://us.php.net/manual/en/ function.isset.php), um ein Gefühl dafür zu bekommen, wie sie funktionieren, Unterschiede usw. –

+0

@jprofit: tatsächlich scheint der logische Negationsoperator in dieser Liste zu fehlen. Sie könnten diese Frage wahrscheinlich als Referenz für '!' Hinzufügen. –

Antwort

20

! ist die logische Negation oder NOT Operator. Es kehrt den Sinn des logischen Tests um.

Das heißt:

  • if(isset) macht etwas passieren, wenn isset logisch ist True.
  • if(!isset) macht etwas passieren, wenn isset logisch ist False.

Mehr über Operatoren (logische und andere Arten) in den PHP documentation. dort nachschlagen ! Ihr Verständnis zu festigen, was es tut. Während Sie dort sind, sehen auch die anderen logischen Operatoren auf:

  • && logische UND
  • || logische ODER
  • xor logische EXKLUSIV-ODER

Welche auch in der Logik häufig verwendet werden, Aussagen.

+0

Gute Erklärung +1 – Churk

3
$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'; 
} 

Edit:

hier ist ein Testfall für Sie:

$p = false; 
echo isset($p) ? '$p is setted : ' : '$p is not setted : '; 
echo empty($p) ? '$p is empty' : '$p is not empty'; 
echo "<BR>"; 

$ p ist setted: $ p ist leer

8

Der ! Charakter der logische "nicht" Operator. Es invertiert die boolesche Bedeutung des Ausdrucks.

Wenn Sie einen Ausdruck haben, der TRUE ergibt, wird er mit ! vorbearbeitet, sodass er FALSE und umgekehrt lautet.

$test = 'value'; 

var_dump(isset($test)); // TRUE 
var_dump(!isset($test)); // FALSE 

isset()TRUE kehrt, wenn die gegebene Variable in dem aktuellen Bereich mit einem nicht-Null-Wert festgelegt ist.

empty()TRUE kehrt, wenn die gegebene Variable nicht in dem aktuellen Bereich definiert ist, oder wenn es mit einem Wert definiert ist, die „leer“ betrachtet wird. Diese Werte sind:

NULL // NULL value 
0  // Integer/float zero 
''  // Empty string 
'0'  // String '0' 
FALSE // Boolean FALSE 
array() // empty array 

Je nach PHP-Version kann ein Objekt ohne Eigenschaften auch als leer angesehen werden.

Das Ergebnis davon ist, dass isset() und empty()fast ergänzen sich (sie die entgegengesetzten Ergebnisse zurück), aber nicht ganz, wie empty() eine zusätzliche Kontrolle über den Wert der Variablen durchführt, isset() einfach überprüft, ob sie definiert ist .

Betrachten Sie das folgende Beispiel:

var_dump(isset($test)); // FALSE 
var_dump(empty($test)); // TRUE 

$test = ''; 

var_dump(isset($test)); // TRUE 
var_dump(empty($test)); // TRUE 

$test = 'value'; 

var_dump(isset($test)); // TRUE 
var_dump(empty($test)); // FALSE 
+0

String ''0'' wird in PHP als logisch falsch bewertet? Pfui. :( –

+0

@ Li-aungYip Ich weiß, es scheint unlogisch, aber es ist nützlich. Weil PHP * sehr * lose eingegeben ist, macht es Sinn, wenn man bedenkt, dass man oft mit Daten von '$ _POST' und Freunden arbeitet, wo alle Daten ist '(string)'. In diesem Fall ist es nützlich, Integer als boolesche Werte übergeben zu können, und damit dies ohne explizites Casting funktioniert, muss '' 0 '' zu 'FALSE' ausgewertet werden ist die Tatsache, dass Casting eine Zeichenfolge zu Int in der Regel ergibt "0", aber Casting als bool ergibt "TRUE", also '(bool) $ str! = (bool) (int) $ str' – DaveRandom

+0

Es ist ein nützliches Idiom, weil Es ist einfach - aber die Art der Nötigung macht mich immer ein bisschen mulmig wegen der potentiellen Fehler. Ein typisches Muster für mich ist es, die Leere eines Strings mit 'if (string)' zu testen. In PHP die leere Zeichenkette '' '' und das wörtliche "0" würde diesen Test bestehen, also müsste ich diese Gewohnheit verlernen. –