マジックメソッド__call
と_callStatic
定義された基本クラスがあるので、宣言されていないメンバー関数への呼び出しが処理されます。
非静的なものと静的なものの両方がある場合、静的演算子は、この場合のように、またはの名前と一緒に使用されるかどうかを::
暗黙的に意味しないため、派生クラスから静的なものを呼び出すことはできないようです。基本クラス。これはここで説明されている特別な構文です:http://php.net/manual/pl/keyword.parent.phpstatic
parent
ここでやりたいのは、呼び出す派生クラスです。__callStatic
これは、呼び出しがデフォルトで非静的呼び出しであり、によって処理されるために失敗します__call
。
基本クラスのメンバー関数に対して明示的に静的な呼び出しを行うにはどうすればよいですか?
<?php
class MyBaseClass {
public static function __callStatic($what, $args)
{
return 'static call';
}
public function __call($what, $args)
{
return 'non-static call';
}
}
class MyDerivedClass extends MyBaseClass {
function someAction()
{
//this seems to be interpreted as parent::Foo()
//and so does not imply a static call
return MyBaseClass::Foo(); //
}
}
$bar = new MyDerivedClass();
echo $bar->someAction(); //outputs 'non-static call'
?>
非静的メソッドを削除すると、が宣言されていないときに呼び出される__call
ため、スクリプトは「静的呼び出し」を出力することに注意してください。__callStatic
__call