2014-12-30 12 views
5

Ich verstehe nicht unter Ausgabe. fand unter Ausdrücke auf php.net Handbuch im booleschen Abschnitt.var_dump (0 == 'alle'); // WARUM TRUE

<?php 

    var_dump(0 == 'all');// IS bool(true) 
    var_dump((string)0 == 'all'); //IS bool(false) 
    var_dump(0 === 'all'); // //IS bool(false) 

?> 
+8

Ein Fehler von PHP-Typ Jonglieren http://php.net/manual/en/language.operators.comparison.php – DhruvPathak

+6

'Wenn Sie eine Zahl mit einer Zeichenfolge vergleichen oder der Vergleich numerische Zeichenfolgen enthält, wird jede Zeichenfolge konvertiert zu einer Zahl und der Vergleich numerisch durchgeführt. –

+1

probiere 'var_dump ((integer) 'all');' und 'var_dump ((integer) '32all 0 ');' und ich denke, du wirst verstehen – Forien

Antwort

7

Wenn Sie eine ganze Zahl mit einem String vergleichen, wird jede Zeichenfolge in eine Zahl umgewandelt, so:

(0 == 'all') -> (0 == 0) -> true 

Der Typ Umwandlung geschieht nicht, wenn der Vergleich === oder !== liegt daran, dies beinhaltet auch der Vergleich des Typ:

(0 === 'all') -> (integer == string) -> false 

die zweite Codezeile Sie Kraft schrieb der Integer-Wert, der als String betrachtet werden soll, sodass die numerische Umwandlung nicht stattfindet.

+1

'(integer == string)' Denke du vergisst ein '=' – Rizier123

+1

@ Rizier123 nicht wirklich, weil ' integer == string' wird als Pseudocode geschrieben und ist logisch immer falsch. Er hat es so geschrieben, dass Gelegenheitsspieler den Unterschied zwischen '==' verstehen können, die Werte mit '===' vergleicht, die Werte ** und ** Typen vergleichen. – Forien

+0

Der Code, den ich geschrieben habe, sollte als _pseudo code_ betrachtet werden, und so ist es egal, wie viele '=' zwischen den '->' und den '<-' Zeichen vorkommen. –