如何in_array检查对象是对象数组?(How does in_array check if an

2019-06-26 15:39发布

是否in_array()做对象比较,它检查所有属性都是一样的吗? 如果$obj1 === $obj2 ,它只会做指针比较呢?

我使用的ORM,所以我宁愿遍历如果对象测试$obj1->getId()已经在数组中,如果它确实对象比较。 如果不是, in_array更加简练。

Answer 1:

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;

......并引用手动什么这实际上会检查:

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

在另一方面,使用标识符(===)时,对象变量当且仅当它们指的是同一类的同一实例是相同的。



Answer 2:

对象都可以在PHP 5+引用和仅可以通过使用复制(从而创建新的对象) clone

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



文章来源: How does in_array check if an object is in an array of objects?