PHP の self と static について

ショコラ
ショコラ

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

以上

Scroll to Top