フロントエンドとして何となく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は呼び出せない。
クラスの中と外とでは『名前空間』が異なるからだ。

クラスの外からprivateprotected要素は呼び出せない。function print()内で定義して、そのファンクションそのものを後から呼び出せば上記出力例のように呼び出す事ができる。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.