是否可以通过使用后期静态绑定来获取调用函数的信息(文件名,行,函数...)?
<?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()
。是否可以(或更容易)使用一些超级特殊的后期静态绑定功能 - 关键字/功能?
答案 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__);
这是一个痛苦的屁股,但我看不到另一种解决方案。