【问题标题】:php class magick function __call doesn't workphp类magick函数__call不起作用
【发布时间】:2015-03-05 10:28:58
【问题描述】:

您好,我尝试使用 magick 类函数 __call 来存储调试信息,但没有任何存储在....

__调用

function __call($method, $arguments)
{

    $load_functions = array('get', 'insert', 'update', 'delete', 'rawQuery');

    if(in_array($method, $load_functions))
    {

        array_push($this->_debug, microtime(true));

    }

}

执行

$app->database->setbase('MyBase');
$query = $app->database->get('MEMB_INFO');

$app->database->debug();

没有存储到 $this->_debug 数组中... $app->database->debug();返回空数组。

【问题讨论】:

  • 你知道__call函数只有在被调用函数不存在的情况下才会被调用?
  • 你扩展的类是什么?
  • 你必须发布一个完整的例子来重现问题。

标签: php class call


【解决方案1】:

魔术方法 __call 仅对不存在的方法调用。但我想你的方法是存在的。

如果你真的想检查调用的方法,你可以使用装饰器。它是保存原始类实例的类,具有与原始类相同的接口,并且每个方法调用都委托回原始对象。您可以将自定义调试逻辑添加到装饰器方法(或使用 __call 并创建通用调试装饰器)。当然,您需要将装饰器实例注入 $app->database。它可以通过多种方式完成,具体取决于您的框架和环境(产品与开发等)。

我的想法示例 - Logging all Soap request and responses in PHP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 2011-07-08
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2011-04-24
    • 2016-12-14
    相关资源
    最近更新 更多