`$this` でプロパティを参照する
テクノロジ系 / class (class / new / プロパティ / メソッド / `$this` / コンストラクタ)
$this でプロパティを参照する
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」が対応すると言える
→ ドリルへ
考えてみよう
既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。
ドリル 01 — $this->name を使った greet
問題
User クラスを定義してください。
public string $name;public function greet(): void { ... }—"こんにちは、{name}です"を出力 ({name}は$this->nameの値)
new User() でインスタンスを作り、name に "太郎" を入れて、greet() を呼んで出力してください。
期待される出力:
こんにちは、太郎です
採点
php scripts/grade.php topics/class/ch05-this/drill/01-greet-with-name/
ヒント
- メソッド内で
$nameではなく$this->nameと書く echo "こんにちは、" . $this->name . "です\n";の形で OK- もしくは
echo "こんにちは、{$this->name}です\n";でも同じ結果