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