php class 魔法函数 __call 不起作用

php class magick function __call doesn't work

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

__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(); return 空数组。

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

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

我所想的例子 - Logging all Soap request and responses in PHP