1

我正在尝试使用单例模式编写一个 db util 类。我的问题是“连接”对象始终为空。连接设置正确。我可能做错了什么?另外,我对 php 开发比较陌生。我应该使用什么方法来找出问题所在?代码如下。

   class DBUtil {
        public $connection = NULL; //mysqli_connection object
        private static $instance = NULL;

        private function _constructor($conn){
            //$this->connection = mysqli_connect(TagMetroConfiguration::getConfigurationValueFor("db_servser_name"), TagMetroConfiguration::getConfigurationValueFor("db_username"), TagMetroConfiguration::getConfigurationValueFor("db_password"), TagMetroConfiguration::getConfigurationValueFor("db_name"));
            $this->connection = new mysqli("localhost", "root", "toor", "testdb");
        }

        public static function getInstance(){
            if(DBUtil::$instance == NULL){
                try{
                    DBUtil::$instance = new DBUtil();
                }catch(Exception $ex){
                    throw new Exception("Unable to create DB Instance");
                }
            }

            return DBUtil::$instance;
        }
}
4

4 回答 4

3

你的构造函数应该被命名__construct(注意两个下划线)。

此外,在您的构造函数中,您有一个参数$conn. 当您调用 时new DBUtil(),您没有提供该输入参数,因此它可能正在调用默认构造函数,而不是您的自定义构造函数。

如果您希望输入参数$conn是可选的,请尝试__construct($conn = null).

或尝试将其称为new DBUtil(null).

于 2012-04-11T14:24:03.390 回答
2
private function _constructor($conn)   ??

这应该是

private function __construct($conn)
于 2012-04-11T14:25:46.997 回答
2

应该有两个下划线____construct)。

于 2012-04-11T14:38:43.303 回答
-1

你应该这样做:

class DBUtil {

        private static $instance;

        private function _construct(){
            $this->$instance = new mysqli("localhost", "root", "toor", "testdb");
        }

        public static function getInstance(){
            if(!isset(self::$instance){
                try{
                    self::$instance = new DBUtil();
                }catch(Exception $ex){
                    throw new Exception("Unable to create DB Instance");
                }
            }

            return self::$instance;
        }
于 2012-04-11T14:28:22.150 回答