14

メソッドが定義されていない場合、エラーをスローする代わりにキャッチオール関数に移動するようにクラスをセットアップする方法はありますか?

私が呼び出し$myClass->foobar();たが foobar がクラス定義に設定されていなかった場合、他のメソッドがそれを処理しますか?

4

4 に答える 4

19

はい、オーバーロードしています:

class Foo {
    public function __call($method, $args) {
        echo "$method is not defined";
    }
}

$a = new Foo;
$a->foo();
$b->bar();

PHP 5.3 以降では、静的メソッドでも実行できます。

class Foo {
    static public function __callStatic($method, $args) {
        echo "$method is not defined";
    }
}

Foo::hello();
Foo::world();
于 2011-06-06T16:07:31.917 に答える
6

__call()を使用して、呼び出されたメソッドとその引数をキャッチします。

于 2011-06-06T16:06:52.103 に答える
6

はい、適切なメソッドが見つからない場合に呼び出される__callマジック メソッドを使用できます。例:

class Foo {
    public function __call($name, $args) {
         printf("Call to %s intercepted. Arguments: %s", $name, print_r($args, true));
    }
}

$foo = new Foo;
$foo->bar('baz'); // Call to bar intercepted. Arguments: string(3) 'baz'
于 2011-06-06T16:07:01.243 に答える
1

魔法の方法。特に、__call()

于 2011-06-06T16:06:36.790 に答える