in_array()
は、すべての属性が同じであることを確認するオブジェクト比較を行いますか? $obj1 === $obj2
の場合は、代わりにポインタの比較を行うだけですか?in_arrayはオブジェクトがオブジェクトの配列内にあるかどうかをどのようにチェックしますか?
私はORMを使用していますので、オブジェクト比較の場合には$obj1->getId()
が既に配列にある場合はオブジェクトテストをループしたいと思います。そうでない場合は、in_array
がはるかに簡潔です。
in_array()
は、すべての属性が同じであることを確認するオブジェクト比較を行いますか? $obj1 === $obj2
の場合は、代わりにポインタの比較を行うだけですか?in_arrayはオブジェクトがオブジェクトの配列内にあるかどうかをどのようにチェックしますか?
私はORMを使用していますので、オブジェクト比較の場合には$obj1->getId()
が既に配列にある場合はオブジェクトテストをループしたいと思います。そうでない場合は、in_array
がはるかに簡潔です。
in_array()
はルーズ比較($a == $b
)を行います。
foreach ($arr as &$member) {
if ($member == $obj) {
return TRUE;
}
}
return FALSE;
...とin_array($obj, $arr, TRUE)
はこれに同じです::
は意味的に、in_array($obj, $arr)
はこれと同じです
foreach ($arr as &$member) {
if ($member === $obj) {
return TRUE;
}
}
return FALSE;
...と、これは実際にチェックするものにmanualを引用します:
比較演算子(==)を使用する場合、オブジェクト変数はcompaつまり、2つのオブジェクトインスタンスが同じ属性と値を持ち、同じクラスのインスタンスである場合、2つのオブジェクトインスタンスは等しいとみなされます。
一方、アイデンティティ演算子(===)を使用する場合、オブジェクト変数は、同じクラスの同じインスタンスを参照する場合に限り、同じです。
オブジェクトはPHP 5以降で常に参照され、clone
を使用してのみコピーできます(したがって、新しいオブジェクトを作成できます)。
つまり、in_array()
を使用できるはずです。それは厳密比較を行い、その場合、第三の引き数、($a === $b
)にTRUE
を通過しない限り
大変感謝しています。愚かなタイマーがあるので、私は別の5ミントを受け入れることはできません。 – yellottyellott