第10章 オブジェクト指向構文 / 第4回 模擬試験

PHPのオブジェクトの比較に関する次の記述のうち、正しいものはどれか。

`==`によるオブジェクト比較は、クラスが同じでプロパティの値がすべて等しい場合に`true`になる。 正解
`===`によるオブジェクト比較は、プロパティの値が等しければ別インスタンスでも`true`になる。
オブジェクトの比較は、PHPでは常にエラーになる。
オブジェクトは配列と全く同じ方法で比較される。
解説
オブジェクトを`==`で比較すると、「同じクラスのインスタンスであり、かつすべてのプロパティの値が等しい」場合に`true`になります。 他の選択肢が誤りである理由は次の通りです。 ・`===`によるオブジェクト比較は、プロパティの値が等しいだけでなく「全く同一のインスタンス」でなければ`true`になりません。プロパティの値が同じでも、別々に`new`した異なるインスタンスであれば`===`は`false`になります。 ・オブジェクトの比較自体はエラーにならず、`==`や`===`で正常に比較できます。 ・オブジェクトの比較(プロパティの値やインスタンスの同一性を見る)と、配列の比較(要素の値やキーの一致を見る)は判定基準が異なります。「全く同じ方法」ではありません。 例: ``` class Point { public function __construct(public int $x, public int $y) {} } $a = new Point(1, 2); $b = new Point(1, 2); var_dump($a == $b); // true(クラスとプロパティの値が同じ) var_dump($a === $b); // false(別インスタンス) var_dump($a === $a); // true(同一インスタンス) ``` (参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.6.2節 オブジェクトの比較 p.534)

あわせて読みたい解説記事