mysqli构造函数返回null

时间:2012-04-11 14:18:49

标签: php mysqli

我正在尝试使用单例模式编写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 个答案:

答案 0 :(得分:3)

您的构造函数应命名为__construct(注意两个下划线)。

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

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

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

答案 1 :(得分:2)

private function _constructor($conn)   ??

应该是

private function __construct($conn)

答案 2 :(得分:2)

应该有两个下划线____construct)。

答案 3 :(得分:-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;
        }