本記事では、
PHPの「self::」と「$this」の違いや、使い分けについて、解説していく。
$thisとは
$thisは、自分自身の「オブジェクト」を指す。
インスタンス化した際、クラス内のメンバ変数やメソッドにアクセスする際に使用する。

実際にサンプルコードで確認する。
<?php
class Colors {
public $colors = 'red ';
public function output_colors_name() { return 'blue '; }
function test() {
echo $this->colors;
echo $this->output_colors_name() ;
}
}
$obj = new Colors();
$obj->test();
出力結果
red blue
インスタンス化したオブジェクト自身が、コールしたtest()メソッド内から$this->を使ってechoしているのは、自身(オブジェクト)の変数やメソッドだ。
self::とは
self:: は、自クラスを示す。
自クラスというのは、言葉通り、class Colors {}というクラスがあれば、そのクラス自体のことである。オブジェクトとは異なる点に注意しよう。

そしてself:: を理解する上で覚えておきたい変数が、
クラス定数と、static変数だ。
const COLORS = 'red '; //クラス定数
public static $colors = 'blue '; //static変数
クラス定数と、static変数は、静的プロパティとも呼ばれ、
オブジェクト自体の変数ではなく、クラスそのものに属する変数であることをまずは理解しよう。
そのため、クラス定数と、static変数にアクセスする場合は、
$thisは使用せず、代わりにselfを使用する。
<?php
class Colors {
const COLORS = 'red ';
public static $colors = 'blue ';
function test() {
echo self::COLORS;
echo self::$colors;
}
}
$obj = new Colors();
$obj->test();
出力結果
red blue
先ほどと同様のことをしているように見えるが、出力しているredとblueという値が、「オブジェクト自身の変数」ではなく、静的プロパティである「クラス自身の変数」であるという認識を持ってもらいたい。
「self::」と「$this」の違い・使い分け
では、最後に改めて、
「self::」と「$this」の違い・使い分けについてまとめる。
「self::」と「$this」の違い
- self::は自クラスを表し、$thisは自身のオブジェクトを表す。
- self::はクラス定数やstatic変数など静的なプロパティにアクセスできるのに対し、
$thisは静的なプロパティにはアクセスできない。
「self::」と「$this」の使い分け
静的なプロパティにアクセスする際は、self::を使用し、
動的なプロパティやメソッドにアクセスする際は$thisを使用するなどの使い分けをする。
どういうことかと言うと、
下記のプログラムを実行すると、self::と$thisの違いを確認できる。
<?php
class Parent {
function test() {
self::who(); // 'parent'
$this->who(); // 'child'
}
function who() {
echo 'parent ';
}
}
class Child extends Parent {
function who() {
echo 'child ';
}
}
$obj = new Child();
$obj->test();
出力結果
parent child
上記プログラムは、
self::は自クラスを表し、$thisは自身のオブジェクトを表すことを確認できる。
- self::who()の場合はParentClass自身のwho()メソッドを実行しているのが分かる。
- $this->who()の場合は、Childクラスをインスタンス化しているため、ChildClassのwho()メソッドを実行しているのが分かる。
関連記事
https://www.php.net/manual/ja/language.oop5.paamayim-nekudotayim.php
https://www.php.net/manual/ja/language.oop5.basic.php
[…] あわせて読みたい (PHP)「self::」と「$this」の違い【使い分け方なども紹介】 | hara-chan.com […]
[…] ・【PHP入門】staticプロパティとstaticメソッド・(PHP)「self::」と「$this」の違い【使い分け方なども紹介】 […]