LoginSignup
31

More than 5 years have passed since last update.

擬似変数$this

Last updated at Posted at 2018-05-04

フロントエンドとして何となく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()内で定義して、そのファンクションそのものを後から呼び出せば上記出力例のように呼び出す事ができる。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31