1

我创建了一个类Debug,其中所有属性和方法都是静态的。使用后期静态绑定,我使用这个类作为记录器,记录正在做什么以及在哪个时刻(实际上我正在测试现在的性能问题,所以我想知道什么时候发生了什么)。

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

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

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

也许是调用堆栈?

4

2 回答 2

2

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

于 2013-05-21T21:31:04.397 回答
0

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

依赖注入可以让你走得很远。为您想要记录的不同类型的事物添加记录器,即。入侵错误密码、邮件日志等

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

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

于 2013-05-21T21:34:35.430 回答