フロントエンドとして何となくPHPを使ってきて慣れ始めた頃、
バックエンドで殆どPHPに触らない同期に「$thisって何?」と訊かれ上手く答えられなかった。
気になるのでちょっと調べてみた。
結論から言うと『$thisとはクラス定義内部でプログラムがアクセス可能なオブジェクト名(インスタンスメソッド)』の事。
以下に例を示す。
<?php
class MyClass
{
// プロパティ(クラスのメンバ変数)の宣言
public $public = 'Public ';
protected $protected = 'Protected ';
private $private = 'Private ';
// メソッド(クラスのメンバ関数)の宣言
function print()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass(); // new <クラス名>で、クラスの中身を使用できる状態にする
echo $obj->public;
$obj->print();
(出力結果)
Public Public Protected Private
上記の例では、クラスMyClass
内においてオブジェクト$public,$protected,$private
それぞれをfunction print()
内部で呼び出すよう定義をしている。
この例では$this
を使用しているが、これは後に記した$obj = new MyClass();
echo $obj->public;
と同じことを、
echo $this->public;
だけで行なっている。
メソッド内で前者の様に書いてもプロパティを呼び出す事はできるが、
擬似変数$this
を使えばより簡潔に記述する事ができる。
P.S.ちなみにecho $obj->public;
で$public
は呼び出せるが、$protected
と$private
は呼び出せない。
クラスの中と外とでは『名前空間』が異なるからだ。
クラスの外からprivate
やprotected
要素は呼び出せない。function print()
内で定義して、そのファンクションそのものを後から呼び出せば上記出力例のように呼び出す事ができる。