2015-02-02 6 views
0

아래 코드에서 오류가 발생합니다. _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); 
    } 
} 

클래스 로거의 인스턴스를 작성하고 당신이 할 수있는 정적 로그 기능에 액세스 :

+0

'Logger :: Log'를 정적으로 호출하면 생성자가 호출되지 않습니다. 'Log()'내부에서'Logger'의 싱글 톤 인스턴스를 가져와야합니다. 그리고 생성자에'$ log'를 저장해야합니다. 그렇지 않으면 잃어 버릴 로컬 변수 일뿐입니다. – LSerni

+0

그리고 뭐라구? 다른 것을 시도 했습니까? –

답변

1

은 $ 로그 변수에 액세스 할 수 있도록 당신이 그것의 참조가 필요 정적 기능 물마루

$mylog = new Logger(); 
$mylog::Log("Your text here"); 
+0

감사합니다. Logger의 객체를 확장 된 Singleton 패턴으로 만들 수는 없습니다. Logger :: getInstance() -> Log ("Message");로 액세스했습니다. 위의 코드는 잘 작동합니다. – Sonal

관련 문제