ch06 7章中 6章目

ch06 — コンストラクタで初期化する

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch06 — コンストラクタで初期化する」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch06 — コンストラクタで初期化する」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch06 — コンストラクタで初期化する」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

コンストラクタ (__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) で初期化する

解説スライド 全 6 枚

右の ボタン キー(またはスワイプ)で次のスライドに進めます。 下の「縦表示」を開くと全スライドを一気に読めます。

  1. コンストラクタで初期化する

    Lesson 8 / Chapter 6

  2. 「new してから 1 つずつ代入」は面倒

    <?php
    $u = new User();
    $u->name = "太郎";
    $u->age  = 20;
    • インスタンスを使うたびに 3 行も書く必要がある
    • 代入し忘れたまま使うとバグの原因になる
    • 生成と初期化 をまとめて 1 行で済ませたい
  3. __constructnew の瞬間に呼ばれる

    <?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 = ... でプロパティを初期化する
  4. 引数名とプロパティ名が同じ場合

    public function __construct(string $name, int $age) {
        $this->name = $name;   // 左は this の name、右は引数の $name
        $this->age  = $age;
    }
    • 左辺の $this->nameプロパティ
    • 右辺の $name引数
    • 同じ名前にしても混ざらない ($this-> が付いているかどうかで判別される)
  5. 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 行」になる
    • どのプロパティを必ず初期化するかが 設計図に書かれる ので、初期化忘れも防げる
  6. このチャプターでできるようになること

    __construct という特別なメソッドが new の瞬間に呼ばれると言える ✅ コンストラクタ引数でプロパティを初期化できる ✅ $this->prop = $引数; のパターンを書ける ✅ new クラス名(引数, ...) で 1 行で生成・初期化できる

    → ドリルへ

1 / 6
📜 スライドを全部一気に読む(縦表示)

Lesson 8 / Chapter 6


「new してから 1 つずつ代入」は面倒

<?php
$u = new User();
$u->name = "太郎";
$u->age  = 20;
  • インスタンスを使うたびに 3 行も書く必要がある
  • 代入し忘れたまま使うとバグの原因になる
  • 生成と初期化 をまとめて 1 行で済ませたい

__constructnew の瞬間に呼ばれる

<?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ステップ)
  1. 01 ドリル 01 — コンストラクタで初期化する README.md starter.php answer.php

演習問題の詳細

この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。

ドリル 01 — コンストラクタで初期化する

問題

User クラスを定義してください。

  • public string $name;
  • public int $age;
  • public function __construct(string $name, int $age) で 2 つのプロパティを初期化する

new User("太郎", 20)1 行で インスタンスを作り、nameage を 1 行ずつ出力してください。

期待される出力:

太郎
20

ヒント

  • メソッド名は __construct (アンダースコア 2 つ)
  • $this->name = $name; $this->age = $age; の 2 行で初期化
  • 呼び出しは $u = new User("太郎", 20);1 行 で完結

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

演習問題(1問)

  1. ドリル 01 — コンストラクタで初期化する

    README.md starter.php answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。

完了にすると進捗に反映されます