端くれプログラマの備忘録 PHP [PHP] staticでないメソッドを静的にコールする

[PHP] staticでないメソッドを静的にコールする

そういう書き方していた第三者のコードを見ていて「そんなの文法的にありえねーだろー」と思ったら実は正解だった。びっくり、知らんかった。C++やC#のプログラム歴が長い自分には何とも気持ち悪い仕様だな。自分は使わない。この仕様は将来は廃止されるっぽい。

<?php

class ClassA
{
    public function test1()
    {
        echo "ClassA::test1\n";
        var_dump(get_class($this));
    }
}

class ClassB
{
    public function test2()
    {
        ClassA::test1();
    }

    public function test3()
    {
        $var = new ClassA();
        $var->test1();
    }
}

$var = new ClassB();
$var->test2(); // var_dump('ClassB')
$var->test3(); // var_dump('ClassA')

参考サイト

PHP: static キーワード – Manual
http://php.net/manual/ja/language.oop5.static.php