Делает ли in_array()
сравнение объектов там, где он проверяет, что все атрибуты одинаковы? Что, если $obj1 === $obj2
, будет ли он вместо сравнения с указателем вместо этого?
Я использую ORM, поэтому я бы предпочел бы $obj1->getId()
тестирование объектов, если $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()
.