是否in_array()
进行对象比较以检查所有属性是否相同?如果$obj1 === $obj2
,它会只做指针比较吗?
$obj1->getId()
我正在使用 ORM,所以如果它进行对象比较,我宁愿循环测试是否已经在数组中的对象。如果没有,那就in_array
更简洁了。
是否in_array()
进行对象比较以检查所有属性是否相同?如果$obj1 === $obj2
,它会只做指针比较吗?
$obj1->getId()
我正在使用 ORM,所以如果它进行对象比较,我宁愿循环测试是否已经在数组中的对象。如果没有,那就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()
.