我的情况最好用一些代码来描述:
class Foo {
function bar () {
echo "called Foo::bar()";
}
}
class SubFoo extends Foo {
function __call($func) {
if ($func == "bar") {
echo "intercepted bar()!";
}
}
}
$subFoo = new SubFoo();
// what actually happens:
$subFoo->bar(); // "called Foo:bar()"
// what would be nice:
$subFoo->bar(); // "intercepted bar()!"
我知道我可以通过在子类中重新定义 bar()
(以及所有其他相关方法)来使它工作,但是为了我的目的,如果 __call
函数可以处理它们。它只会使事情变得很多更整洁、更易于管理。
这在 PHP 中可行吗?
最佳答案
__call()
仅在找不到该函数时才调用,因此您的示例(如所写)是不可能的。
关于PHP对子类的神奇方法__call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1535180/