2013-08-23 24 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');