2014-12-30 11 views
5

Non riesco a capire di seguito l'output. trovato sotto le espressioni sul manuale php.net nella sezione booleana.var_dump (0 == 'all'); // WHUE 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

Un trucco di tipo juggling PHP http://php.net/manual/en/language.operators.comparison.php – DhruvPathak

+6

'Se si confronta un numero con una stringa o il confronto implica stringhe numeriche, allora ogni stringa viene convertita a un numero e il confronto eseguito numericamente. –

+1

prova 'var_dump ((numero intero) 'tutto');' e 'var_dump ((numero intero) '32all 0');' e penso che capirai – Forien

risposta

7

Se si confronta un intero con una stringa, ogni stringa viene convertito in un numero, così:

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

La conversione del tipo non accade se il confronto è === o !== perché questo include anche il confronto del tipo :

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

la seconda riga di codice che hai scritto forza il valore intero da considerare come una stringa, quindi il cast numerico non si verifica.

+1

'(intero == stringa)' Pensi di aver dimenticato un '=' – Rizier123

+1

@ Rizier123 non proprio, perché ' intero == stringa è scritto come pseudo-codice e logicamente è sempre falso. Lo ha scritto in questo modo che i casual possono capire la differenza tra '==' che confronta i valori con '===' che confrontano i valori ** e ** tipi. – Forien

+0

Il codice che ho scritto dovrebbe essere considerato come _pseudo code_, e quindi non importa quanti '=' si verificano tra i caratteri '->' e '<-'. –