PHPのstaticとselfは静的メソッドで使用することができます。(インスタンス化せずに使用できる。)
staticはプログラムを実行する際のクラスを指します。
selfは記述しているクラスそのものを指します。
<?php
class HOGE {
protected const CLASS_NAME = 'hoge';
public function display()
{
echo self::CLASS_NAME . "\n";
echo static::CLASS_NAME . "\n";
}
}
class FUGA extends HOGE {
protected const CLASS_NAME = 'fuga';
}
(new HOGE())->display();
(new FUGA())->display();
// (new HOGE())->display();の結果
hoge
hoge
// (new FUGA())->display();の結果
hoge
fuga
結果
- HOGEの結果に関しては、どちらも自クラスを指すため結果がどちらも
hogeになる。 - FUGAの結果に関しては、
selfは記述しているクラスを指すのでhogeを表示し、fugaは実行時のクラスを指すのでfugaが表示される。