【PHP】$this(擬似変数) - オブジェクト(インスタンス)自身を記憶する変数
オブジェクトの内部から自身のフィールにアクセスするには$this
を使います。
ここでは、$thisについて解説します。
検証環境
$this
$this
は“オブジェクト自身を記憶する擬似変数”です。
PHPが事前に用意した変数であり、オブジェクトの内部処理のみで使用が可能です。
主にオブジェクトの内部処理(メソッド等)から自身のフィールドや他のメソッドにアクセスする場合に使用します。
基本構文
オブジェクト自身を取得する箇所で$this
を記述します。
$this
この$this
を介して、自身のフィールドやメソッドへのアクセスが可能です。
フィールド
$this->フィールド名
メソッド
$this->メソッド名(実引数)
サンプル
<?php
// 人間クラス
class Person {
// 苗字
public $l_name;
// 名前
public $f_name;
// フルネームの取得
public function full_name() {
___ih_hl_start
$name = $this->l_name . ' ' . $this->f_name;
___ih_hl_end
return $name;
}
// あいさつ
public function greeting() {
echo "Hey!\n";
___ih_hl_start
echo "My name is ". $this->full_name() . ".\n";
___ih_hl_end
}
}
$person = new Person();
$person->l_name = 'TANAKA';
$person->f_name = 'TARO';
$person->greeting();
?>
$ php sample.php
Hey!
My name is TANAKA TARO.
Person
クラスは苗字と名前の2つのフィールドとfull_name
とgreeting
の2つのメソッドを持ちます。
各メソッドで$this
を使用しており、full_name
メソッドは$this
を使い、自身の苗字($l_name
)と名前($f_name
)を結合し、戻り値として返します。
greeting
メソッドはあいさつのメッセージを出力し、$this
を使って、full_name
メソッドを呼び出し、フルネームを取得しています。
また、$this
はそのオブジェクト自身を記憶するため、オブジェクトが異なれば、フィールドに記憶されている値も異なります。
<?php
// 人間クラス
class Person {
// 苗字
public $l_name;
// 名前
public $f_name;
// フルネームの取得
public function full_name() {
$name = $this->l_name . ' ' . $this->f_name;
return $name;
}
// あいさつ
public function greeting() {
echo "Hey!\n";
echo "My name is ". $this->full_name() . ".\n";
}
}
___ih_hl_start
$person1 = new Person();
$person1->l_name = 'TANAKA';
$person1->f_name = 'TARO';
$person2 = new Person();
$person2->l_name = 'SUZUKI';
$person2->f_name = 'JIRO';
$person1->greeting();
$person2->greeting();
___ih_hl_end
?>
$ php sample.php
Hey!
My name is TANAKA TARO.
Hey!
My name is SUZUKI JIRO.
24〜31行目で2つのオブジェクトの生成とフィールド値の設定を行っています。
それらのオブジェクトに対し、33〜34行目でgreeting
メソッドを呼び出していますが、各処理の出力結果は名前の部分が異なります。
これは上述したとおり、$this
は自身のオブジェクトを記憶しており、それを介してアクセスするフィールドも各値になるためです。
演習問題
次の実行結果になる車クラスを扱うプログラムを作成してください。
なお、下記条件を満たすものとします。
- 車クラスを作成する
- 車クラスのフィールドはナンバー、色、乗車人数とする
- 車情報を出力するinfoメソッドを作成する
===== 車情報 =====
ナンバー : 1234
色 : 紺色
乗車人数 : 5人
===== 車情報 =====
ナンバー : 0987
色 : 赤
乗車人数 : 2人
次の実行結果になる家クラスを扱うプログラムを作成してください。
なお、下記条件を満たすものとします。
- 家クラスを作成する
- 家クラスのフィールドは階数、間取り、完成日とする
- 家情報を出力するinfoメソッドを作成する
===== 家情報 =====
階数 : 1階
間取り : 3LDK
完成日 : 2022/01/25
===== 家情報 =====
階数 : 3階
間取り : 10LDK
完成日 : 2020/03/24
===== 家情報 =====
階数 : 2階
間取り : 5LDK
完成日 : 2021/08/01