首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >日志类函数调用php

日志类函数调用php
EN

Stack Overflow用户
提问于 2014-10-21 10:49:12
回答 1查看 832关注 0票数 1

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

代码语言:javascript
代码运行次数:0
运行
复制
<?php 
    class wrapper extends client {
        public function __call($name,$args) {
            var_dump($name);
            var_dump($args);
        }
    }

    $client = new wrapper();
    $client->users()->foobar();
?>

我的回应是:

代码语言:javascript
代码运行次数:0
运行
复制
    string(5) "users"
    array(0) {
    }

我的目标是记录调用哪个函数和使用params。

如何看到调用了users类上的函数foobar()。而不仅仅是“用户”?有什么合适的方法吗?

EN

回答 1

Stack Overflow用户

发布于 2014-10-21 10:56:23

您要做的是实现Decorator模式,而不仅仅是扩展类。这很容易,因为我们已经使用了那些神奇的方法。但是您忽略了包装类中的两个基本部分:

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

只有在类没有给定名称的方法时,才会调用神奇的__call方法,因此扩展无法工作。因此,您需要包装器Decorator类,它没有这些方法。

示例:

代码语言:javascript
代码运行次数:0
运行
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26484860

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档