是否in_array()
做对象比较,它检查所有属性都是一样的吗? 如果$obj1 === $obj2
,它只会做指针比较呢?
我使用的ORM,所以我宁愿遍历如果对象测试$obj1->getId()
已经在数组中,如果它确实对象比较。 如果不是, in_array
更加简练。
是否in_array()
做对象比较,它检查所有属性都是一样的吗? 如果$obj1 === $obj2
,它只会做指针比较呢?
我使用的ORM,所以我宁愿遍历如果对象测试$obj1->getId()
已经在数组中,如果它确实对象比较。 如果不是, in_array
更加简练。
in_array()
做比较宽松 ( $a == $b
),除非你传递TRUE
到第三个参数,在这种情况下,它确实比较严格 ( $a === $b
)。
语义, in_array($obj, $arr)
是相同的:
foreach ($arr as &$member) {
if ($member == $obj) {
return TRUE;
}
}
return FALSE;
...和in_array($obj, $arr, TRUE)
是相同的:
foreach ($arr as &$member) {
if ($member === $obj) {
return TRUE;
}
}
return FALSE;
......并引用手动什么这实际上会检查:
当使用比较运算符(==),对象变量以简单的方式进行比较,即:两个对象实例是相等的,如果它们具有相同的属性和值,并且是同一类的实例。
在另一方面,使用标识符(===)时,对象变量当且仅当它们指的是同一类的同一实例是相同的。
对象都可以在PHP 5+引用和仅可以通过使用复制(从而创建新的对象) clone
。
这意味着你应该能够使用in_array()