ショコラ
PHP の self と static について
PHP の self と static の関係。
継承しても変わらないのが self
継承して変わるのが static
もっさん先輩
動作を確認してみましょう。
↓下のような関係で、Childクラス から testメソッド を実行したら、どのクラスの helloメソッド が呼び出されるでしょうか?
<?php
class ParentClass
{
public static function hello() {
echo 'Hello Parent',PHP_EOL;
}
public function __invoke() {
self::hello();
static::hello();
}
}
class ChildClass extends ParentClass
{
public static function hello() {
echo 'Hello Child',PHP_EOL;
}
}
(new ChildClass)();
結果です。
# php test.php
Hello Parent
Hello Child
↑Childクラス から testメソッドを実行すると、
①self の場合は、それが書かれているクラスの helloメソッド を呼び出す。
②static の場合は、継承後のクラスの helloメソッド を呼び出す。
ということが分かりましたよね。
因みに、Childクラス に Parentクラス と同じ __invokeメソッド を定義すれば、self は Childクラス になります。
<?php
class ParentClass
{
public static function hello() {
echo 'Hello Parent',PHP_EOL;
}
public function __invoke() {
self::hello();
static::hello();
}
}
class ChildClass extends ParentClass
{
public static function hello() {
echo 'Hello Child',PHP_EOL;
}
public function __invoke() {
self::hello();
static::hello();
}
}
(new ChildClass)();
# php test.php
Hello Child
Hello Child
以上