当有人解释将空数组与任何数字进行比较并返回@versions = PaperTrail::Version.order('created_at')
时,有人会解释PHP内部会发生什么吗?
true
我在PHP 7.0,7.1和5.6中进行了测试。
答案 0 :(得分:3)
首先,请不要进行这种比较;执行此操作的代码非常可疑,可能非常破碎。
回答你的问题:原因是数组与非数组的比较具有set out in the documentation定义的行为。数组总是大于它所比较的任何标量值。对象总是大于数组,并且数组总是大于标量(例如整数)。其他比较以各种方式处理,如文档中所定义。
来自文档:
与各种类型的比较
Type of Operand 1 Type of Operand 2 Result ... array anything array is always greater
一些示例代码和demo:
var_dump(
[] > -1, //true
[] > 0, // true
[] > 222222222, // true
[] > [], // false, obviously
[] > new stdClass(), //false, object wins
new stdClass() > [] // true, object wins
);
答案 1 :(得分:2)
数组总是更大