我有一个记录器课程,我不确定哪个是实现它的最佳方法。
此类中的write()
方法需要能够从应用程序中每个类中的任何方法调用。
以前我在做Logger :: write()时将该方法作为静态方法。它既快捷又容易,但我觉得这不是最好的方法。
我应该将logger类的实例注入到我的其他对象中(通过构造函数或setter方法),然后当我需要写入日志调用时,它就像:
$this->logger->write()
答案 0 :(得分:1)
如果您的public static function write()
无需访问记录器类中的任何属性或方法,则绝对没有理由不将其设置为静态。 (如在Logger :: write()中可访问的那样。如果没有正当理由,强制对象被初始化是多余的。
答案 1 :(得分:1)
这实际上取决于你希望如何使用该课程。
如果您不需要实例来使用该方法,那么将该方法定义为静态,并将其静态地称为Logger::write()
,这很好。
但是如果你需要一个实例,那么你需要决定如何在整个代码中使用该实例。例如,您可以使用Dependency Injection将实例传递到您需要的代码。这就是我建议你这样做的方式。
答案 2 :(得分:0)
为什么要让它在每个对象中都可用?在任何地方注入它似乎非常繁琐,并不是很实用。如果您需要在静态方法,常规函数或全局范围内记录某些内容,该怎么办?
或简单地说:只是打电话给Logger::write()
有什么问题?也许你过度思考了?