1
我目前正在从我们自己的专有日志记录解决方案迁移到log4php。
我们在项目中只使用静态方法来使用很多类。该文档定义了基本的使用情况,如:在静态环境中使用log4php
class MyClass {
private $logger;
public function __construct() {
$this->logger = Logger::getLogger(__CLASS__);
$this->logger->debug('currently in constructor');
}
}
但我不能使用,因为我需要在$logger
静态上下文是可用的。制作$logger
静态也没有帮助,因为我的类的构造函数从不被调用(因为它的所有成员都是静态的)。
该文档告诉我为该成员使用静态初始化器。但是,我必须记得为所有我使用的课程调用它。这似乎太容易出错。
于是我想出了这一点:
class Foo {
private static $logger = null;
private static function logger() {
if(null == self::$logger) self::$logger = Logger::getLogger(__CLASS__);
return self::$logger;
}
public static function bar() {
self::logger()->debug("test");
}
}
Foo::bar();
但是,似乎有太多的开销为好。那么,有什么建议?
你的方法有一个很大的缺点:与自动加载,这将无法工作,因为类后,他们的第一只宣布的环境使用。另外,在某处推送记录器是一种不好的编码模式。最好让班级要求并注入。 – Sven 2012-10-12 23:53:05