概要
$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() で「こんにちは、太郎です」と出力 |
📝 演習: ドリル 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";でも同じ結果