아래 코드에서 오류가 발생합니다. _construct에서 초기화되는 정적 함수 Log에서 $ log에 액세스 할 수 없기 때문에 오류가 발생합니다.정적 함수에서 PHP 변수에 액세스하기
class Logger extends Singleton{
protected function __construct() {
if(!class_exists("Log")) {
include '/usr/php/Log.php';
}
$MONITORING_LOGFILE = "/var/log/Monitoring.log";
ini_set('error_log', 'syslog');
openlog($MONITORING_LOGFILE, LOG_NDELAY, LOG_LOCAL0);
$log = Log::singleton('syslog', LOG_LOCAL0, $MONITORING_LOGFILE, array('lineFormat' => ' %{message}'), PEAR_LOG_DEBUG);
}
public static function Log($message){
$log->err($message);
}
}
좋아, 난 그냥 같이 initializng하는 싱글 톤 패턴에서 확인을 경우 확인하려면 .... 위의 코드 지금
class Logger extends Singleton{
private $log;
protected function __construct() {
if(!class_exists("Log")) {
include '/usr/php/Log.php';
}
$MONITORING_LOGFILE = "/var/log/Monitoring.log";
ini_set('error_log', 'syslog');
openlog($MONITORING_LOGFILE, LOG_NDELAY, LOG_LOCAL0);
$this->log = Log::singleton('syslog', LOG_LOCAL0, $MONITORING_LOGFILE, array('lineFormat' => ' %{message}'), PEAR_LOG_DEBUG);
}
public function Log($message){
$this->log->err($message);
}
}
하고는 제대로 작동을 수정?
class Logger extends Singleton{
private static $log; //static instance of Log::singleton
protected function __construct() {
if(!class_exists("Log")) {
include '/usr/php/Log.php';
}
$MONITORING_LOGFILE = "/var/log/Monitoring.log";
ini_set('error_log', 'syslog');
openlog($MONITORING_LOGFILE, LOG_NDELAY, LOG_LOCAL0);
self::$log = Log::singleton('syslog', LOG_LOCAL0, $MONITORING_LOGFILE, array('lineFormat' => ' %{message}'), PEAR_LOG_DEBUG);
}
//static method
public static function Log($message){
self::$log->err($message);
}
}
클래스 로거의 인스턴스를 작성하고 당신이 할 수있는 정적 로그 기능에 액세스 :
'Logger :: Log'를 정적으로 호출하면 생성자가 호출되지 않습니다. 'Log()'내부에서'Logger'의 싱글 톤 인스턴스를 가져와야합니다. 그리고 생성자에'$ log'를 저장해야합니다. 그렇지 않으면 잃어 버릴 로컬 변수 일뿐입니다. – LSerni
그리고 뭐라구? 다른 것을 시도 했습니까? –