14

是否in_array()进行对象比较以检查所有属性是否相同?如果$obj1 === $obj2,它会只做指针比较吗?

$obj1->getId()我正在使用 ORM,所以如果它进行对象比较,我宁愿循环测试是否已经在数组中的对象。如果没有,那就in_array更简洁了。

4

2 回答 2

30

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;

...并引用手册中实际检查的内容:

使用比较运算符(==)时,对象变量的比较方式很简单,即:如果两个对象实例具有相同的属性和值,并且是同一类的实例,则它们相等。

另一方面,当使用恒等运算符 (===) 时,对象变量是相同的当且仅当它们引用同一类的同一实例时。

于 2012-07-31T15:26:46.347 回答
0

对象在 PHP 5+ 中始终是引用,并且只能通过使用clone.

这意味着您应该能够使用in_array().

于 2012-07-31T15:26:28.520 回答