2014-01-15 133 views
3

为什么php认为空数组大于一个?而对象不是? 如果和boolean相比竟然很奇怪。PHP奇怪的比较行为

var_dump(array() > 1); // Print true 
var_dump(array() === false); // Print false 
var_dump(array() === true); // Print false again 

var_dump(new stdClass > 1); // Print false 

var_dump('' > 1); // Print false 

PHP 5.4.4-14 + deb7u7

+0

这是很明显的,为什么的var_dump(阵列()===假);和var_dump(array()=== true);打印false,因为数组不是布尔值,并且===操作符检查,如果两者都是相同的类型。 –

回答

0
array() > 1 

是不是真的有意义的比较,但无可否认array() < 1是真正看起来更直观。然而从文档来看,与非数组相比,数组总是更大。

array() === false 
array() === true 

===检查比较的项目是否是相同的类型。一个数组与boolean不是同一个类型,所以上述都是错误的。

'' > 1 

上面的空字符串是0,所以这是错误的。

new stdClass > 1 

这给出了Object of class stdClass could not be converted to int通知为何您会看到错误是可能的。

More info here.

+0

好吧,我明白了!但我在C实现中寻找“为什么”。不管怎么说,还是要谢谢你 –