2009-09-13 4 views
0

나는 DbSimple을 사용하고 있지만 다른 모듈에 쓸 수있는 코드가 있습니다. 여기의 코드입니다 : 내가 클래스 생성자에 코드를 추가싱글 톤 및 DbSimple

<?php 

require_once 'config.php'; 
require_once 'DbSimple/Generic.php'; 

class MysqlWorker 
{ 
    private static $instance = NULL; 

    public function getInstance() 
    { 
     if(self::$instance == NULL) 
     { 
      self::$instance = new MysqlWorker(); 
     } 
     return self::$instance; 
    } 

    private function __construct() 
    { 
     self::$instance = DbSimple_Generic::connect('mysql://'.MYSQL_USER.':'.MYSQL_PASS.'@'.MYSQL_HOST.'/'.MYSQL_DB.''); 
     self::$instance->setErrorHandler('mysqlErrorHandler'); 
     self::$instance->query("SET NAMES 'utf8'"); 
    }                                              

    private function mysqlErrorHandler($message, $info) 
    { 
     if (!error_reporting()) return; 
     echo "Database error: $message<br><pre>"; 
      print_r($info); 
     echo "</pre>"; 
     exit(); 
    } 

    private function __clone() {} 
} 
?>  

:

var_dump(self::$instance); 

내가 가지고 :

객체 (DbSimple_Mysql) # 2 (17) {...}

이렇게 모든 것이 분명합니다. 하지만 난 다른 위치에 코드를 사용하고 때

require_once 'modules/mysql_worker.php'; 

var_dump(MysqlWorker::getInstance());                         

결과는 다음과 같습니다 # 1 (0) {}

MysqlWorker을 수행

객체 (MysqlWorker) :: getInstance 개체가 비어 있습니까?

답변

0

생성자와 정적 함수 getInstance 둘 다 정적 속성 MysqlWorker::$instance에 무언가를 할당합니다.

class MysqlWorker 
{ 
    private static $instance = NULL; 
    private $connection = NULL; 

    public function getInstance() 
    { 
     if(self::$instance == NULL) 
     { 
      self::$instance = new MysqlWorker(); 
     } 
     return self::$instance; 
    } 

    private function __construct() 
    { 
     $this->connection = DbSimple_Generic::connect('mysql://'.MYSQL_USER.':'.MYSQL_PASS.'@'.MYSQL_HOST.'/'.MYSQL_DB.''); 
     $this->connection->setErrorHandler(array($this,'mysqlErrorHandler')); 
     $this->connection->query("SET NAMES 'utf8'"); 
    } 
+0

감사합니다. 내 문제였습니다. 하지만 코드에 오류가 있습니다. 우리는 자기가 아닌 정적 객체를 참조 할 수 없습니다. – Ockonal

+0

이 수정되었습니다. Btw :'SET NAMES utf8'은 클라이언트 lib esp를 "혼동"시킬 수 있습니다. mysql_real_escape_string (DbSimple이 사용하는 경우). http://php.net/mysql_set_charset을 참조하십시오. – VolkerK