PHP对子类的神奇方法__call

标签 php oop magic-methods

我的情况最好用一些代码来描述:

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/

相关文章:

java - 为什么我们有非静态函数/方法?

python - 粒子实例没有属性 '__getitem__'

php - 为什么来自 POSTMAN 的 POST 请求返回空?

php - Laravel 在 init 时崩溃,错误 500(无附加信息)

python - 如何在类的初始属性中制作空列表?

python - 在python中,如何为我自己的矩阵类创建两个索引切片?

python - 如何让 Python 2 的 __getitem__ 在一个类上工作?

php - WooCommerce:在任何地方添加/显示产品或变体自定义字段

php - Yii2,带有属性名称的自定义验证消息

javascript - JavaScript 中的原型(prototype)继承是否表现出类型多态性?