调用公共子方法时自动调用父类的__call?

时间:2012-11-23 16:34:10

标签: php magic-methods

我有以下代码:

class A
{
    public function __call($method, $args)
    {
        echo 'Hello';
    }
}

class B extends A
{
    public function test()
    {
        echo 'Hello world';
    }
}

$b = new B();
b->test(); //outputs 'Hello world';

现在,当调用test()时,输出为:Hello world。但我希望它首先回应:Hello world和我想要回应:父级的Hello,而不是在A类中声明测试方法。

我该如何解决这个问题?

编辑:

对不起,也许我不够清楚,抱歉我来自荷兰的英语不好,我想要的是当一个孩子的方法被调用时,父类得到的名字是孩子的方法被调用。

3 个答案:

答案 0 :(得分:4)

__ call是一个重载函数。 当没有定义公共函数时将要调用的含义!!!

所以要打招呼只调用任何其他未定义的函数

$b = new B();
b->notAFunction();

只会打招呼。

答案 1 :(得分:0)

你可以这样打电话给parent::test()

class B extends A {

    public function test()
    {
        echo 'Hello world';
        parent::test();
    }
}

输出:

Hello WorldHello

答案 2 :(得分:-1)

您可以重命名__call以测试并在子测试开始时调用parent :: test()。

没有办法自动化。

还要指出,如果使用两个下划线命名__call,则访问修饰符应为私有,_call为protected。