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
が表示される。