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()
。