第7章 標準クラスライブラリ / 第5回 模擬試験
PHPのクラスとオブジェクトの関係に関する次の記述のうち、正しいものはどれか。
クラスはオブジェクトの設計図(雛形)であり、`new`によって実体化したものがオブジェクト(インスタンス)である。
正解
クラスとオブジェクトは全く同じものを指す用語である。
1つのクラスから生成できるインスタンスは1つだけに制限される。
オブジェクトはクラスの定義なしに生成することができる。
解説
クラスは、オブジェクトが持つべきプロパティやメソッドを定義した「設計図(雛形)」であり、`new クラス名()`によってその設計図を基に実際に生成された実体が「オブジェクト(インスタンス)」です。
他の選択肢が誤りである理由は次の通りです。
・クラスとオブジェクトは異なる概念です。クラスは「設計図」という抽象的な定義、オブジェクトはその設計図から作られた「具体的な実体」を指します。
・1つのクラスから、`new`を何度でも呼び出すことで複数のインスタンスを生成できます(それぞれが独立したプロパティの値を持てます)。「1つだけに制限される」は誤りです。
・オブジェクトを生成するには、必ず元となるクラス(無名クラスであっても`class`キーワードによる定義)が必要です。「クラスの定義なしに生成できる」は誤りです。
例:
```
class User {
public function __construct(public string $name) {}
}
$user1 = new User('Taro'); // Userクラスから生成された1つ目のインスタンス
$user2 = new User('Jiro'); // 2つ目のインスタンス($user1とは別物)
```
(参照: 独習PHP 第4版 第7章 標準クラスライブラリ 7.1.2節 クラスとオブジェクトの関係 p.309〜310)