自动执行PHP函数末尾的函数

时间:2010-10-20 11:29:22

标签: php function execute

我希望在每个函数结束时调用自定义错误日志/调试函数。

示例:

  • 我想致电error_log(__METHOD__);
  • 我想echo $query;
  • 显示执行时间等。

在每个函数的末尾用于调试目的,而不必每次都调用该自定义函数。

非常感谢。

2 个答案:

答案 0 :(得分:2)

为此使用调试器/分析器,例如使用XDebug或Zend Debugger。

有关两者的比较,请参阅

答案 1 :(得分:1)

经过多次RTM后,我不得不使用debug_backtrace();,即使价格昂贵。

这是我如何做到的:

// debug(debug_backtrace(),$query);
// $query is optional
define('DEBUG',true);

function debug($trace,$query = null) {
    if(DEBUG) {
        $caller=array_shift($trace);
        error_log("Initiating class: " . $caller['class']);
        error_log("Calling function: " . $caller['function']);
        error_log("In file: " . $caller['file']);
        error_log("@ line: " .$caller['line']);
        if(isset($query))
        {
            error_log("Performing Query: " .$query);
        }
        error_log("---");
    }
   else
       exit();
}

并在每个函数结束时添加以下内容:

function init_userInfo($ai, $v) {
    $this->user[$ai] = $v;
    debug(debug_backtrace());
}

或者如果函数有SQL查询:

function insertQuery($query)
{
    mysql_query($query)
        or die("MySQL Error: " . mysql_error());
    debug(debug_backtrace(),$query);

}

输出在php_error.log中通常是这样的:

[20-Oct-2010 19:02:07] Initiating class: Db
[20-Oct-2010 19:02:07] Calling function: selectQuery
[20-Oct-2010 19:02:07] In file: /Code/classes/user.class.php
[20-Oct-2010 19:02:07] @ line: 100
[20-Oct-2010 19:02:07] Performing Query: SELECT * FROM user WHERE uid=(3) LIMIT 1
[20-Oct-2010 19:02:07] ---
[20-Oct-2010 19:02:07] Initiating class: User
[20-Oct-2010 19:02:07] Calling function: htmlform_addUserInfo
[20-Oct-2010 19:02:07] In file: /Code/index.php
[20-Oct-2010 19:02:07] @ line: 6
[20-Oct-2010 19:02:07] ---