第10章 オブジェクト指向構文 / 第3回 模擬試験
PHPのコンストラクタとデストラクタに関する次の記述のうち、誤っているものはどれか。
コンストラクタはインスタンス生成時に自動的に呼び出される。
デストラクタはオブジェクトが破棄される際に自動的に呼び出される。
1つのクラスに複数のコンストラクタをオーバーロードして定義できる。
正解
コンストラクタ内でプロパティを初期化するのが一般的である。
解説
PHPは、Javaなど一部の言語にある「同名で引数の異なる複数のコンストラクタを定義できる」オーバーロードの仕組みをサポートしていません。1つのクラスにつき`__construct()`は1つしか定義できず、複数定義しようとするとエラーになります(可変長引数やデフォルト引数、`static`ファクトリメソッドなどで代用します)。
他の選択肢が正しい理由は次の通りです。
・コンストラクタ(`__construct()`)は、`new`でインスタンスを生成した際に自動的に呼び出されます。
・デストラクタ(`__destruct()`)は、オブジェクトが破棄される際に自動的に呼び出されます。
・コンストラクタ内でプロパティに初期値を設定するのは、オブジェクトを使える状態に整える一般的な使い方です。
例:
```
class User {
public function __construct(public string $name) {}
}
// 引数の型・数違いで__construct()を複数定義することはできない
```
(参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.1.4〜10.1.5節 p.482〜484)