使用另一个范围的魔术常量

时间:2013-05-21 21:29:07

标签: php class static magic-methods

我创建了一个类Debug,其中所有属性和方法都是静态的。使用late static binding我使用这个类作为正在做什么的记录器以及在哪一刻(事实上我现在正在测试性能问题,所以我现在想要什么,什么时候去)。

所以目前我在每个类的每个主要方法中都有一些东西,比如Debug::log(__CLASS__ . '::' . __METHOD__);。在Debug::log()方法中,我可以添加时间并将其存储在某个数组中。

如果我想要某一天改变行为,我需要在许多文件中更改大量代码......

我的问题是:是否有可能以某种方式省略这些__CLASS__ . '::' . __METHOD__,而Debug::log()方法可以知道从哪个类以及从哪个方法调用它?

也许是一个调用堆栈?

2 个答案:

答案 0 :(得分:2)

您正在寻找的功能是debug_backtrace();它将为您提供可用于此目的的数据结构。没有办法让魔术常量以这种方式工作,虽然我同意这个想法,你可以考虑发布一个功能请求,以允许在调用时评估用作函数定义默认值的魔术常量,而不是定义时间。我会支持这样的功能请求。

答案 1 :(得分:0)

您正在执行的日志记录看起来像Reflection类型的日志记录,而不是基于方面的日志记录。

你可以在依赖注入方面取得很大进展。为您要记录的不同类型的事物添加记录器,即。入侵 - 密码错误,邮件日志等。

在我看来,对于Reflection类型的日志记录没有多大意义,这需要你暴露太多的内部。

如果您只想在发生错误时使用堆栈跟踪,请使用Exception->getTrace