簡體   English   中英

調用公共子方法時自動調用父類的__call?

[英]Automatically invoke __call of parent class when invoking public child method?

我有以下代碼:

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類中的測試方法。

我該如何解決這個問題?

編輯:

對不起,也許我不夠清楚,抱歉我的英語不好我來自荷蘭,我想要的是當一個孩子的方法被調用,父類得到被調用的孩子的方法的名稱。

__call是一個重載函數。 當沒有定義公共函數時將要調用的含義!

所以要打招呼只調用任何其他未定義的函數

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

只會給你打招呼。

你可以這樣調用parent::test()

class B extends A {

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

產出:

Hello WorldHello

您可以重命名__call以測試並在子測試開始時調用parent :: test()。

沒有辦法自動化這個。

還要指出,如果使用兩個下划線命名__call,則訪問修飾符應為私有,_call為protected。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM