クラスの基本 / ch06
コンストラクタで初期化する
<!-- LLM_CONTEXT: Lesson 8 / Chapter 6 目的: __construct を定義し、new の瞬間にプロパティを初期化できるようにする 扱わない: 修飾子 (ch07) / 継承・static (L9) 読み上げ時間目安: 3 分半〜4 分 -->
コンストラクタで初期化する
Lesson 8 / Chapter 6
「new してから 1 つずつ代入」は面倒
<?php
$u = new User();
$u->name = "太郎";
$u->age = 20;- インスタンスを使うたびに 3 行も書く必要がある
- 代入し忘れたまま使うとバグの原因になる
- 生成と初期化 をまとめて 1 行で済ませたい
__construct は new の瞬間に呼ばれる
<?php
class User {
public string $name;
public int $age;
public function __construct(string $name, int $age) {
$this->name = $name;
$this->age = $age;
}
}
$u = new User("太郎", 20);
echo $u->name . "\n"; // 太郎
echo $u->age . "\n"; // 20- メソッド名は 必ず
__construct(アンダースコア 2 つ + construct) new User("太郎", 20)のようにnewの()に引数を書く- 中で
$this->prop = ...でプロパティを初期化する
引数名とプロパティ名が同じ場合
public function __construct(string $name, int $age) {
$this->name = $name; // 左は this の name、右は引数の $name
$this->age = $age;
}- 左辺の
$this->nameは プロパティ - 右辺の
$nameは 引数 - 同じ名前にしても混ざらない (
$this->が付いているかどうかで判別される)
1 行で生成と初期化を済ませられる
<?php
$a = new User("太郎", 20);
$b = new User("花子", 25);
echo $a->name . " (" . $a->age . ")\n";
echo $b->name . " (" . $b->age . ")\n";実行結果:
太郎 (20)
花子 (25)
- インスタンスを作るたびに「3 行」が「1 行」になる
- どのプロパティを必ず初期化するかが 設計図に書かれる ので、初期化忘れも防げる
このチャプターでできるようになること
✅ __construct という特別なメソッドが new の瞬間に呼ばれると言える
✅ コンストラクタ引数でプロパティを初期化できる
✅ $this->prop = $引数; のパターンを書ける
✅ new クラス名(引数, ...) で 1 行で生成・初期化できる
→ ドリルへ
演習問題(1問)
サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリ(nomuraya-dojo/php)を clone してください。