是否需要建立一個類,以便如果未定義某個方法,而不是拋出一個錯誤,那麼它將轉到一個捕獲所有函數?PHP - 一類中的catchall方法
這樣如果我打電話$myClass->foobar();
但foobar從來沒有在類定義中設置,其他一些方法將處理它?
是否需要建立一個類,以便如果未定義某個方法,而不是拋出一個錯誤,那麼它將轉到一個捕獲所有函數?PHP - 一類中的catchall方法
這樣如果我打電話$myClass->foobar();
但foobar從來沒有在類定義中設置,其他一些方法將處理它?
是的,這是overloading:
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();
Magic methods。特別是,__call()。
__invoke的東西比__call不同。 – akond 2011-06-06 16:07:31
如果@changokun想要做'$ myclass();' – 2011-06-06 16:07:55
@akond:__invoke會是答案:當然,這是我已經修復的思想差距。 – 2011-06-06 16:08:22
您想使用__call()來捕獲被調用的方法及其參數。
是的,您可以使用__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'
+1要添加,它是* PHP *重載,這是(莫名其妙)與其他OOP語言不同的用法。 – webbiedave 2011-06-06 16:10:16