2013-08-23 27 views
0

在一個HTML文件調用PHP代碼控制檯顯示當執行PHP代碼如下結果:的意外行爲如果在PHP代碼語句

PHP處理:調試3:測試IF:在IF

PHP處理:調試4:假

不過,我期望的第一個控制檯結果是php processing: debug 3: TEST IF: in ELSE。例如,根據控制檯,if-else語句的錯誤部分(if)被執行,我不明白爲什麼(對於這個非常簡單的代碼)?

有什麼建議嗎?

PHP代碼:

//TEST CODE 
if($productselected_form[0] == true) 
{ 
    $response_array['debug3'] = 'TEST IF: in IF'; 
} 
else 
{ 
    $response_array['debug3'] = 'TEST IF: in ELSE'; 
} 
$response_array['debug4'] = $productselected_form[0]; 

//send the response back 
echo json_encode($response_array); 
//END TEST CODE 

Javascript代碼(在執行console.log Ajax調用PHP代碼):

console.log("php processing: debug 3: "+msg.debug3); 
console.log("php processing: debug 4: "+msg.debug4); 
+1

有啥'$ productselected_form [0]'的價值,還是應該只是猜測? –

+0

'$ productselected_form'包含什麼? – Neal

+4

做一個'var_dump($ productselected_form [0])'看看你測試的是什麼。由於您使用簡單的'=='相等性測試,所以PHP可以根據需要自由地進行類型轉換/轉換,而且很多東西會測試等於'true'。 –

回答

4

問題是你是一個字符串值進行比較爲布爾這將總是評估爲真。你應該比較串來串像這樣

//TEST CODE 
if($productselected_form[0] == 'true') 
+0

今天有很多討厭的人看起來好像是 –

+1

哼....比較你的答案和@ RocketHazmat的一個。當然,你打的是正確的觀點,但這不是一個真正的答案,它給出了任何解釋或任何事情。 – mishik

+0

是的,我應該添加他將字符串值與布爾值進行比較的事實,它將始終評估爲真 –

2

$productselected_form[0]可能是一個字符串,而不是一個布爾值。當使用==時,PHP會轉換類型以便它們可以進行比較。

我猜你有'false',而不是false。當轉換爲布爾值,下面的字符串是false

  • '0'
  • ''(空字符串)

別的是true。所以當你做$productselected_form[0] == true時,你實際上在做'false' == true,它的計算結果爲true


要轉換'false'false你可以做這樣的事情:

$productselected_form[0] = ($productselected_form[0] === 'true');