我有一个带有魔术方法的基类__call
并已_callStatic
定义,因此可以处理对未声明的成员函数的调用。
当你同时拥有非静态和静态的时,似乎不可能从派生类调用静态的,因为静态运算符::
并不隐含地表示static
如果与parent
或在这种情况下,名称基类。这是这里解释的特殊语法:http: //php.net/manual/pl/keyword.parent.php
我在这里要做的是调用的派生类__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