我正在处理现有类的包装函数。
<?php
class wrapper extends client {
public function __call($name,$args) {
var_dump($name);
var_dump($args);
}
}
$client = new wrapper();
$client->users()->foobar();
?>
我的回应是:
string(5) "users"
array(0) {
}
我的目标是记录调用哪个函数和使用params。
如何看到调用了users类上的函数foobar()。而不仅仅是“用户”?有什么合适的方法吗?
发布于 2014-10-21 02:56:23
您要做的是实现Decorator模式,而不仅仅是扩展类。这很容易,因为我们已经使用了那些神奇的方法。但是您忽略了包装类中的两个基本部分:
只有在类没有给定名称的方法时,才会调用神奇的__call方法,因此扩展无法工作。因此,您需要包装器Decorator类,它没有这些方法。
示例:
class BetterWrapper {
protected $child;
public function __construct(){
$this->child = new Client();
}
public function __call($name,$args) {
var_dump($name);
var_dump($args);
return call_user_func_array(array($this->child, $name), $args);
}
}
试试这个吧。
有关__call方法的机制,请参阅此文档:http://php.net/manual/en/language.oop5.overloading.php#object.call
https://stackoverflow.com/questions/26484860
复制