読者です 読者をやめる 読者になる 読者になる

tohokuaikiのチラシの裏

技術的ネタとか。

Confluenceのプラグイン開発を承ります。ご連絡はこちらのホームページからお願いいたします。

PHPのself::とstatic::の違い

PHP: static キーワード - Manualのコメント読んでわかったのでメモ。

<?php
class a {

    static protected $test="class a\n";

    public function static_test(){

        echo static::$test;
        echo self::$test;

    }

}

class b extends a {

    static protected $test="class b\n";

}

$obj = new a();
$obj->static_test();

echo "\n";

$obj = new b();
$obj->static_test();
?>

$ php static_test.php
class a
class a

class b
class a
  • static::$foo は、上書きされる可能性がある
  • self::$foo は、上書きされない基底クラスのstaticを読みに行く

なんつーか、感覚的には逆な感じのするキーワードだな。