我正在使用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 );
我得到了:
object(DbSimple_Mysql)#2(17){...}
所以,一切都很清楚。 但是,当我在其他位置使用代码时:
require_once 'modules/mysql_worker.php';
var_dump( MysqlWorker::getInstance() );
结果是:
对象(MysqlWorker)#1(0){}
为什么 MysqlWorker :: getInstance 对象为空?
答案 0 :(得分: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'" );
}