有没有办法快捷:
function a($where){
echo $where;
}
function b(){
a(basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__);
}
这样的事情:
define("__myLocation__", ''.basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__.'');
function a($where){
echo $where;
}
function b(){
a(__mYLocation_);
}
我知道这不能用常量来完成(这只是一个理论上的例子),但我找不到缩短代码的方法。如果使用函数来获取我的行,它将获得该函数不是调用函数的行的行。
我通常调用一个直接打印到日志文件的函数,但在我的日志中我需要知道调用函数的位置,所以我使用basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__
这将打印如下内容:
index.php::b()::6
当你在不同的文件中有超过500个函数时,会有很多代码。有没有缩短或更好的方法来做到这一点?
答案 0 :(得分:1)
debug_backtrace()应该可以帮到你,虽然我不知道你切割的每个日志会对它进行调用会有什么影响。试试这个:
function cut_log() {
$trace = debug_backtrace();
echo basename($trace[1]['file']) . '::' . $trace[1]['function']
. '::' . $trace[1]['line'];
}
function a() {
cut_log();
}
a();
答案 1 :(得分:0)
呃..我想你可以用eval和那个常数做到这一点。
define("__myLocation__", "''.basename(__FILE__).'::'.__FUNCTION__.'()::'.__LINE__.''");
function a($where){
echo $where;
}
function b(){
a(eval(__myLocation__));
}
但你真的不应该使用eval来做任何事情。