in_array()
在检查所有属性是否相同的情况下进行对象比较吗?
如果$obj1 === $obj2
,它只是做指针比较会怎么样?
我正在使用ORM,所以如果对象比较,如果$obj1->getId()
已经在数组中,我宁愿循环测试对象。如果没有,in_array
更加简洁。
答案 0 :(得分:29)
in_array()
执行松散比较($a == $b
)除非您将TRUE
传递给第三个参数,在这种情况下它会 strict 比较($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;
...并引用manual关于实际检查的内容:
使用比较运算符(==)时,会以简单的方式比较对象变量,即:如果两个对象实例具有相同的属性和值,则它们是相同的,并且是同一类的实例。
另一方面,当使用身份运算符(===)时,对象变量是相同的,当且仅当它们引用同一个类的相同实例时。
答案 1 :(得分:0)
对象始终是PHP 5+中的引用,只能使用clone
复制(从而创建新对象)。
这意味着您应该可以使用in_array()
。