日志类函数调用php

时间:2014-10-21 10:49:12

标签: php class oop extends

我正在处理现有类的包装函数。

<?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。

我怎么能看到用户类上的函数foobar()被调用。而不仅仅是“用户”?有没有正确的方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

您要做的是实现装饰器模式,而不仅仅是扩展类。这很容易,因为我们已经使用了你已经使用过的魔法。但是你错过了包装类中的两个基本部分:

  • 实例化包装的子类
  • 中继函数调用子类

如果该类没有具有给定名称的methd,则只会调用神奇的 __ call 方法,因此您的扩展程序无效。所以你需要没有这些方法的Wrapper 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