Logger类,如何从任何方法访问它

时间:2012-12-15 18:38:33

标签: php static-methods

我有一个记录器课程,我不确定哪个是实现它的最佳方法。

此类中的write()方法需要能够从应用程序中每个类中的任何方法调用。

以前我在做Logger :: write()时将该方法作为静态方法。它既快捷又容易,但我觉得这不是最好的方法。

我应该将logger类的实例注入到我的其他对象中(通过构造函数或setter方法),然后当我需要写入日志调用时,它就像:

$this->logger->write()

3 个答案:

答案 0 :(得分:1)

如果您的public static function write()无需访问记录器类中的任何属性或方法,则绝对没有理由不将其设置为静态。 (如在Logger :: write()中可访问的那样。如果没有正当理由,强制对象被初始化是多余的。

答案 1 :(得分:1)

这实际上取决于你希望如何使用该课程。

如果您不需要实例来使用该方法,那么将该方法定义为静态,并将其静态地称为Logger::write(),这很好。

但是如果你需要一个实例,那么你需要决定如何在整个代码中使用该实例。例如,您可以使用Dependency Injection将实例传递到您需要的代码。这就是我建议你这样做的方式。

答案 2 :(得分:0)

为什么要让它在每个对象中都可用?在任何地方注入它似乎非常繁琐,并不是很实用。如果您需要在静态方法,常规函数或全局范围内记录某些内容,该怎么办?

或简单地说:只是打电话给Logger::write()有什么问题?也许你过度思考了?