2014-12-30 34 views
5

Çıktının altını anlamıyorum. boolean bölümünde php.net el kitabında aşağıdaki ifadeleri bulundu. Eğer bir dize ile bir tamsayı karşılaştırırsanızvar_dump (0 == 'hepsi'); // NEDEN DOĞRU

<?php 

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

?> 
+8

http://php.net/manual/en/language.operators.comparison.php http://php.net/manual/en/language.operators.comparison.php – DhruvPathak

+6

Bir toplama türünde bir dizgi ile karşılaştırırsanız veya karşılaştırma sayısal dizeleri içerirse, her dizge dönüştürülür bir sayı ve karşılaştırma sayısal olarak gerçekleştirilir.' –

+1

denemek var_dump ((tamsayı) 'all'); 've' var_dump ((tamsayı) '32all 0'); 've sanırım anlayacaksınız – Forien

cevap

7

, her dize yüzden, bir sayıya dönüştürülür: Karşılaştırma === veya !== olduğunda bu da içerdiğinden

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

tür dönüştürmesi olmaz tip karşılaştırılması:

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

Eğer kuvvet yazdı kodun ikinci satırı Bir dize olarak kabul edilecek tamsayı değeri ve bu nedenle sayısal döküm gerçekleşmez.

+1

'(integer == string)' '' '' '' '' '' '' – Rizier123

+1

@ Rizier123 'un gerçekten unuttuğunu düşünün, çünkü '' integer == string 'sözde kod olarak yazılır ve mantıksal olarak her zaman yanlıştır. O kadar sıradan yazarlar, '==' ile değerleri ** ve ** türlerini karşılaştıran '===' arasındaki karşılaştırmayı anlamışlardır. – Forien

+0

Yazdığım kod _pseudo code_ olarak kabul edilmeli ve '' '' '' '' '' '' '' 'arasında ne kadar çok olduğu önemli değildir. –

İlgili konular