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