2009-09-13 118 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