php – 显式调用基类的成员函数
发布时间:2020-12-13 13:10:24 所属栏目:PHP教程 来源:网络整理
导读:我有一个基类,定义了魔术方法__call和_callStatic,以便处理对未声明的成员函数的调用. 当你同时拥有非静态和静态的两者时,似乎无法从派生类中调用静态的,因为静态运算符::如果与父类一起使用,则不隐式表示静态,或者在本例中,基类的名称.这是一个特殊的语法:
我有一个基类,定义了魔术方法__call和_callStatic,以便处理对未声明的成员函数的调用.
当你同时拥有非静态和静态的两者时,似乎无法从派生类中调用静态的,因为静态运算符::如果与父类一起使用,则不隐式表示静态,或者在本例中,基类的名称.这是一个特殊的语法: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方法会使脚本输出“静态调用”,因为在未声明__call时会调用__callStatic.
要避免此类行为,您可以使用空代理类,即在运行时不链接父代和MyBaseClass:
class MyBaseClass { public static function __callStatic($what,$args) { return 'static call ' . PHP_EOL; } public function __call($what,$args) { return 'dynamic call ' . PHP_EOL; } } class ProxyClass extends MyBaseClass { //"Empty" class } class MyDerivedClass extends MyBaseClass { function someAction() { return ProxyClass::Foo(); } } $bar = new MyDerivedClass(); var_dump($bar->someAction()); //outputs 'static call' http://pastebin.com/7JMJUmXt (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容