2009-09-13 81 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());                         

結果是:

對象(MysqlWorker)#1(0){}

爲什麼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 2009-09-13 10:29:03

+0

已修復。順便說一句:'SET NAMES utf8'可能會「混淆」客戶端lib esp。 mysql_real_escape_string(如果DbSimple使用它)。請參閱http://php.net/mysql_set_charset – VolkerK 2009-09-13 10:41:48