CakePHP製のCMSである Croogo のソースを眺めていて気付いたんですが、クラス内でstatic修飾子を使っていないインスタンスメソッドを、::演算子を使って静的に呼び出すと、$thisのスコープが呼び出した側のオブジェクトになるという現象に気付きました。
具体的には下記のコードを実行すると、”Test 2″ が表示されます。
class Test1
{
public function callName()
{
echo $this->name;
}
}
class Test2
{
public $name = 'Test 2';
public function callMethod()
{
Test1::callName();
}
}
$obj = new Test2();
$obj->callMethod();
ちなみにstatic修飾子を付けると、Fatal errorとなるので、本来であれば推奨されない使い方のような気もします。
これってPHP5の常識なんでしょうか?