Синглтоны и DbSimple - PullRequest
       8

Синглтоны и DbSimple

0 голосов
/ 13 сентября 2009

Я использую DbSimple, но есть некоторый код, который я мог бы записать в другой модуль. Вот его код:

<code><?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 "
"; выход(); } приватная функция __clone () {} } ?>

Когда я добавил код в конструктор класса:

var_dump( self::$instance );

Я получил:

объект (DbSimple_Mysql) # 2 (17) {...}

Итак, там все ясно. Но когда я использую код в другом месте:

require_once 'modules/mysql_worker.php';

var_dump( MysqlWorker::getInstance() );                                                                                                

Результат:

объект (MysqlWorker) # 1 (0) {}

Почему MysqlWorker :: getInstance объект пуст?

1 Ответ

0 голосов
/ 13 сентября 2009

И конструктор, и статическая функция 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'" );
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...