ch05 7章中 5章目

ch05 — $this でプロパティを参照する

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch05 — $this でプロパティを参照する」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch05 — $this でプロパティを参照する」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch05 — $this でプロパティを参照する」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

$this「いま動いているメソッドが属しているインスタンス自身」 を指す特別な変数だ。メソッドの中から $this->name と書けば、そのメソッドを呼んだインスタンス自身の name プロパティを読み書きできる。$user->greet() を実行するとき、メソッド greet の中の $this$user を指し、別の $another->greet() のときは $another を指す。同じメソッドが、呼ばれたインスタンスに応じて違う値を扱えるようになる仕組みの中心が $this

$this を理解すると、メソッドが「自分のデータに基づいて振る舞いを変える」設計ができるようになる。function greet() の中で echo "こんにちは、" . $this->name . "です"; と書いておけば、太郎の User を作って呼べば「こんにちは、太郎です」、花子なら「こんにちは、花子です」と、データに応じて結果が変わる。これがオブジェクト指向の典型的な書き方になる。

このチャプターで最頻出のエラーが 「$this 抜け」。メソッドの中でプロパティを使うつもりで echo $name; と書いてしまうと、メソッドのローカル変数 $name を探しに行って「未定義」エラーになる。プロパティに触りたいときは必ず $this-> を前に付ける、というルールを染み込ませるのがこの章のゴール。

学習目標

  • メソッド内では $this->prop自分のプロパティ を読み書きできる
  • $this は「いま動いているインスタンス自身」を指す
  • メソッドの中身がプロパティに依存して変わるパターンが書ける

ドリル

no 内容
01 $this->name を使った greet() で「こんにちは、太郎です」と出力

解説スライド 全 6 枚

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

  1. $this でプロパティを参照する

    Lesson 8 / Chapter 5

  2. メソッドから自分のプロパティを使いたい

    <?php
    class User {
        public string $name;
    
        public function greet(): void {
            // ここで $name を使いたいが、ただの $name では取れない
            echo "こんにちは、????です\n";
        }
    }
    • メソッドの中で $name と書いても、それは メソッド内のローカル変数 扱い
    • 「いま動いているインスタンスのプロパティ」を使いたい → $this を使う
  3. $this->プロパティ名 で自分のプロパティ

    <?php
    class User {
        public string $name;
    
        public function greet(): void {
            echo "こんにちは、" . $this->name . "です\n";
        }
    }
    
    $u = new User();
    $u->name = "太郎";
    $u->greet();   // → こんにちは、太郎です
    • $thisいま動いているインスタンス自身 を指す
    • $this->name で「このインスタンスの name プロパティ」が取れる
    • 外から見る時の $u->name と同じ感覚で、内側からは $this->name
  4. インスタンスごとに動きが変わる

    <?php
    $a = new User();
    $a->name = "太郎";
    
    $b = new User();
    $b->name = "花子";
    
    $a->greet();   // → こんにちは、太郎です
    $b->greet();   // → こんにちは、花子です
    • 同じ greet() メソッドを呼んでも、$this が指す相手 が違う
    • だから出力も変わる
    • これが「インスタンスごとに振る舞いを変える」基本の仕掛け
  5. $this-> 経由でプロパティに書き込みもできる

    <?php
    class Counter {
        public int $count;
    
        public function up(): void {
            $this->count = $this->count + 1;
        }
    }
    
    $c = new Counter();
    $c->count = 0;
    $c->up();
    $c->up();
    echo $c->count . "\n";   // → 2
    • $this->count = ...自分の プロパティを書き換える
    • 「自分の状態を変えるメソッド」が書けるようになった
  6. このチャプターでできるようになること

    ✅ メソッド内で $this->prop で自分のプロパティを読める ✅ メソッド内で $this->prop = 値; で自分のプロパティを書き換えられる ✅ 同じメソッドでも $this が違えば動きが変わると言える ✅ 「外から $obj->prop」と「内から $this->prop」が対応すると言える

    → ドリルへ

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

Lesson 8 / Chapter 5


メソッドから自分のプロパティを使いたい

<?php
class User {
    public string $name;

    public function greet(): void {
        // ここで $name を使いたいが、ただの $name では取れない
        echo "こんにちは、????です\n";
    }
}
  • メソッドの中で $name と書いても、それは メソッド内のローカル変数 扱い
  • 「いま動いているインスタンスのプロパティ」を使いたい → $this を使う

$this->プロパティ名 で自分のプロパティ

<?php
class User {
    public string $name;

    public function greet(): void {
        echo "こんにちは、" . $this->name . "です\n";
    }
}

$u = new User();
$u->name = "太郎";
$u->greet();   // → こんにちは、太郎です
  • $thisいま動いているインスタンス自身 を指す
  • $this->name で「このインスタンスの name プロパティ」が取れる
  • 外から見る時の $u->name と同じ感覚で、内側からは $this->name

インスタンスごとに動きが変わる

<?php
$a = new User();
$a->name = "太郎";

$b = new User();
$b->name = "花子";

$a->greet();   // → こんにちは、太郎です
$b->greet();   // → こんにちは、花子です
  • 同じ greet() メソッドを呼んでも、$this が指す相手 が違う
  • だから出力も変わる
  • これが「インスタンスごとに振る舞いを変える」基本の仕掛け

$this-> 経由でプロパティに書き込みもできる

<?php
class Counter {
    public int $count;

    public function up(): void {
        $this->count = $this->count + 1;
    }
}

$c = new Counter();
$c->count = 0;
$c->up();
$c->up();
echo $c->count . "\n";   // → 2
  • $this->count = ...自分の プロパティを書き換える
  • 「自分の状態を変えるメソッド」が書けるようになった

このチャプターでできるようになること

✅ メソッド内で $this->prop で自分のプロパティを読める ✅ メソッド内で $this->prop = 値; で自分のプロパティを書き換えられる ✅ 同じメソッドでも $this が違えば動きが変わると言える ✅ 「外から $obj->prop」と「内から $this->prop」が対応すると言える

→ ドリルへ

この章で取り組む 演習問題の流れ (1ステップ)
  1. 01 ドリル 01 — $this->name を使った greet README.md starter.php answer.php

演習問題の詳細

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

ドリル 01 — $this->name を使った greet

問題

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

  • public string $name;
  • public function greet(): void { ... }"こんにちは、{name}です" を出力 ({name}$this->name の値)

new User() でインスタンスを作り、name"太郎" を入れて、greet() を呼んで出力してください。

期待される出力:

こんにちは、太郎です

ヒント

  • メソッド内で $name ではなく $this->name と書く
  • echo "こんにちは、" . $this->name . "です\n"; の形で OK
  • もしくは echo "こんにちは、{$this->name}です\n"; でも同じ結果

🧪 ブラウザで試す

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

PHP ランタイム未読込

          

        

演習問題(1問)

  1. ドリル 01 — $this->name を使った greet

    README.md starter.php answer.php

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

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