1

次のコードがあります。

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. しかし、最初に echo: Hello world を実行し、クラス A でテスト メソッドを宣言せずに親の hello: Hello を実行したい.

どうすればこれを解決できますか?

編集:

申し訳ありませんが、私はオランダ出身です。私が望むのは、子のメソッドが呼び出されたときに、親クラスが呼び出された子のメソッドの名前を取得することです。

4

3 に答える 3

4

__call はオーバーロード関数です。パブリック関数が定義されていないときに呼び出されることを意味します!!!

したがって、hello を取得するには、定義されていない他の関数のみを呼び出します

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

挨拶だけします。

于 2012-11-23T16:36:20.293 に答える
0

この方法で呼び出すことができますparent::test()

class B extends A {

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

出力:

Hello WorldHello
于 2012-11-23T16:37:27.790 に答える
-1

__call の名前を test に変更し、子テストの先頭で parent::test() を呼び出すことができます。

これを自動化する方法はありません。

また、__call に 2 つのアンダースコアを付けて名前を付ける場合、アクセス修飾子は private で、_call は保護されている必要があります。

于 2012-11-23T16:39:52.007 に答える