第10章 オブジェクト指向構文 / 第2回 模擬試験
PHPのクラスとオブジェクトに関する次の記述のうち、誤っているものはどれか。
`new`演算子でクラスのインスタンスを生成する。
コンストラクタは`__construct()`という名前のメソッドで定義する。
クラスの外から`$this`を使ってプロパティにアクセスできる。
正解
デストラクタは`__destruct()`で定義し、オブジェクトが破棄される際に呼ばれる。
解説
`$this`は、インスタンスメソッドの内部からそのインスタンス自身を参照するための疑似変数で、クラスの外部やstaticメソッド内からは使用できません(外部からインスタンスのプロパティにアクセスするには`$obj->property`のようにオブジェクト変数を介す必要があります)。
他の選択肢が正しい理由は次の通りです。
・`new クラス名()`でそのクラスのインスタンス(オブジェクト)を生成します。
・コンストラクタはインスタンス生成時に自動的に呼び出される特殊なメソッドで、`__construct()`という名前で定義します。
・デストラクタは`__destruct()`で定義し、オブジェクトへの参照がなくなった時(多くはスクリプト終了時やガベージコレクション時)に自動的に呼び出されます。
例:
```
class User {
public function __construct(public string $name) {}
public function greet(): string {
return "Hello, {$this->name}"; // $thisはメソッド内でのみ有効
}
}
$u = new User('Taro');
echo $u->greet();
```
(参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.1節 クラスの定義 p.472〜488)