Ответ 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;
... и процитировать manual о том, что это действительно проверяет:
При использовании оператора сравнения (==) переменные объекта сравниваются простым образом, а именно: два экземпляра объекта равны, если они имеют одинаковые атрибуты и значения и являются экземплярами одного и того же класса.
С другой стороны, при использовании оператора идентификации (===) переменные объекта идентичны тогда и только тогда, когда они относятся к одному и тому же экземпляру того же класса.