2014-02-07 18 views
-2

我試圖執行這段代碼爲什麼PHP認爲「P1」等於0PHP如何將其解釋爲真?

<?php 
    $id = 'p1'; 
    echo $id."<br>"; 
    echo ($id == 0) ? 'true' : 'false'; 
?> 

誰能給我解釋一下?

+0

使用'==='或比較類似的類型。 – ToBe

+1

這個文檔很清楚這個:http://www.php.net/manual/en/language.operators.comparison.php –

回答

3

PHP並implicit conversion從字符串'p1'與數量比較字符串時,編號int(0)

var_dump((int)'p1'); 
// int(0) 

那麼什麼是真正發生的事情是:

echo ((int)'p1') == 0) ? 'true' : 'false'; 

所以任何字符串不開始與一些以零比將導致true,因此您在腳本中獲得'true'

1

documentation

當轉換爲布爾值,下面的值被認爲是 FALSE:

the boolean FALSE itself 
the integer 0 (zero) 
the float 0.0 (zero) 
the empty string, and the string "0" 
an array with zero elements 
an object with zero member variables (PHP 4 only) 
the special type NULL (including unset variables) 
SimpleXML objects created from empty tags 

所有其它值都被認爲是TRUE(包括任何資源)。

您的字符串不是空的,因此它是TRUE

+1

如果測試是'if($ p1)...',那麼這將適用。 OP專門將字符串與數字0進行了比較,因此首先完成了對整數的轉換。 –

1

PHP Manual

如果我們嘗試比較字符串中的號碼或比較涉及數字字符串,那麼每個字符串轉換爲數字並進行數字比較

正如您可以在同一頁上的比較運算符表中看到的那樣:

$a === $b - 同 - TRUE如果$a等於$b,並且它們是相同類型的。

1

這是由於php是鬆散類型的語言。

基本上比較不同類型(字符串和你的情況下的一個整數)有時會有令人驚訝的結果。基本上不建議比較不同類型的變量。儘管如此,您可以使用[類型比較表](單擊)1來檢查期望的結果,並找出哪些病例不會有令人意外的結果。