我创建了一个类Debug
,其中所有属性和方法都是静态的。使用late static binding我使用这个类作为正在做什么的记录器以及在哪一刻(事实上我现在正在测试性能问题,所以我现在想要什么,什么时候去)。
所以目前我在每个类的每个主要方法中都有一些东西,比如Debug::log(__CLASS__ . '::' . __METHOD__);
。在Debug::log()
方法中,我可以添加时间并将其存储在某个数组中。
如果我想要某一天改变行为,我需要在许多文件中更改大量代码......
我的问题是:是否有可能以某种方式省略这些__CLASS__ . '::' . __METHOD__
,而Debug::log()
方法可以知道从哪个类以及从哪个方法调用它?
也许是一个调用堆栈?
答案 0 :(得分:2)
您正在寻找的功能是debug_backtrace()
;它将为您提供可用于此目的的数据结构。没有办法让魔术常量以这种方式工作,虽然我同意这个想法,你可以考虑发布一个功能请求,以允许在调用时评估用作函数定义默认值的魔术常量,而不是定义时间。我会支持这样的功能请求。
答案 1 :(得分:0)
您正在执行的日志记录看起来像Reflection类型的日志记录,而不是基于方面的日志记录。
你可以在依赖注入方面取得很大进展。为您要记录的不同类型的事物添加记录器,即。入侵 - 密码错误,邮件日志等。
在我看来,对于Reflection类型的日志记录没有多大意义,这需要你暴露太多的内部。
如果您只想在发生错误时使用堆栈跟踪,请使用Exception->getTrace
。