0

我想为日志编写一个非常通用的函数:

function msglog($type, $message) {
echo date("r") . " " . __FILE__ . " - $type - $message" . PHP_EOL;
}

我将在我的代码中几乎所有地方都使用它,这些代码将在几个 php 脚本中分派include。如此处所示,无论在何处调用该函数,__FILE__都始终使用主脚本文件名进行赋值。

有没有一种方法可以在函数本身中获取调用者脚本的名称,而无需将其作为参数传递?

EDIT1 - 它不是重复的

尽管目的是检索来电者信息,就像其他一些问题一样,解决方案是相同的。知道答案就很明显它们是相互关联的。我的问题有另一个“范围”。它与包含和脚本文件名检索相关,而不是未知上下文中的函数名。

EDIT2 - 答案

是的,debug_backtrace()功能就是答案。

这是我正在寻找的解决方案:

function msglog( $type, $message) {
    $caller = debug_backtrace();
    echo date("r") . $caller[0]["file"] . " - $type - $message" . PHP_EOL;
}
4

2 回答 2

1

尝试:

$caller = debug_backtrace();
$caller = $caller[1];
echo $caller['function'];

你应该得到最后一个调用的函数的名称

function msglog($type, $message) {
    $caller = debug_backtrace();
    $caller = $caller[1];
    echo date("r") . " " . $caller['function'] . " - $type - $message" . PHP_EOL;
}

您还可以获得其他信息:

"file" => (string) "caller_filename.php"
"line" => (int) number of line in caller_filename.php
"function" => (string) "function name"
于 2019-08-21T21:58:13.380 回答
0

使用$_SERVER数组,如下所示:

echo date("r") . " " . $_SERVER['PHP_SELF'] . " - $type - $message" . PHP_EOL;

这将始终为您提供调用该函数的文件的名称

于 2019-08-21T21:59:45.837 回答