概要
コンストラクタ (__construct) は new の瞬間に自動的に呼ばれる特別なメソッド で、インスタンスが生まれると同時にプロパティを初期化するために使う。これまでは new User(); $u->name = "太郎"; $u->age = 20; のように 3 行に分けて書いてきたが、__construct(string $name, int $age) を定義しておけば new User("太郎", 20) の 1 行で生成と初期化が完了 する。代入忘れも防げて、設計図側に「このクラスはこの値が必ず必要」という意図を残せる。
書き方は public function __construct(...) { ... } で、メソッド名は アンダースコア 2 つ + construct と決まっている。中で $this->name = $name; のように引数をプロパティに代入していくのが定番パターン。new クラス名(引数, ...) のときに () の中に書いた値が、そのままコンストラクタの引数として渡る仕組みになっている。引数名とプロパティ名を同じにしても $this-> が付くかどうかで判別されるので混ざらない。
PHP 8 には コンストラクタプロモーション という短縮記法もあり、public function __construct(public string $name, public int $age) { } と書くだけでプロパティ宣言と代入を一気に済ませられる。本章ではまず標準形のコンストラクタを書けるところを目標にして、短縮形は補足として頭の片隅に置いておく。
学習目標
__construct(...)という特別なメソッドがnewの瞬間に呼ばれると言える- コンストラクタ引数でプロパティを初期化できる
new クラス名(引数, ...)で 1 行で生成・初期化できる
ドリル
| no | 内容 |
|---|---|
| 01 | __construct(string $name, int $age) で初期化する |
📝 演習: ドリル 01 — コンストラクタで初期化する
問題
User クラスを定義してください。
public string $name;public int $age;public function __construct(string $name, int $age)で 2 つのプロパティを初期化する
new User("太郎", 20) で 1 行で インスタンスを作り、name と age を 1 行ずつ出力してください。
期待される出力:
太郎
20ヒント
- メソッド名は
__construct(アンダースコア 2 つ) $this->name = $name;$this->age = $age;の 2 行で初期化- 呼び出しは
$u = new User("太郎", 20);の 1 行 で完結