PHP使用后期静态绑定来获取调用函数?

时间:2012-08-21 12:55:54

标签: php debugging late-static-binding debug-backtrace

是否可以通过使用后期静态绑定来获取调用函数的信息(文件名,行,函数...)?

<?php
class Log{
    public static function write($msg){
        $line = ??;
        $msg = date('Y-m-d H:i:s').' '.$line.' '.$msg;
    }
}

Log::write("wuhuu!"); // write new log entry including >>this<< line/filename/..
?>

次,我used debug_backtrace()new \Exception + getTrace()。是否可以(或更容易)使用一些超级特殊的后期静态绑定功能 - 关键字/功能?

3 个答案:

答案 0 :(得分:1)

是的,

PHP为其运行的任何脚本提供了大量预定义常量。但是,这些常量中的许多常量都是通过各种扩展创建的,并且只有在这些扩展可用时才会出现,无论是通过动态加载还是因为它们已被编译。

有八个魔法常数会根据它们的使用位置而改变。例如, LINE 的值取决于脚本中使用的行。这些特殊常量不区分大小写,如下所示:

_ LINE _ _ CLASS _ _ METHOD _

http://php.net/manual/en/language.constants.predefined.php

但是您仍然需要将该数据提供给方法,例如log( _ LINE _ ,_ METHOD _ )。

对于全局警告,您可以捕获http://www.php.net/manual/en/function.set-error-handler.php

的人

除此之外..

答案 1 :(得分:1)

您应该检查XDebug扩展名:

xdebug_call_file(), xdebug_call_line() xdebug_call_class() xdebug_call_function()

不建议在生产环境中使用这些功能(XDebug,debug_backtrace())。

答案 2 :(得分:1)

不幸的是debug_backtrace可能是你最好的,尽管效率很低。

替代方法是将行和文件传递回日志方法......

Log::write("wuhuu!", __LINE__, __FILE__);

这是一个痛苦的屁股,但我看不到另一种解决方案。