我刚刚升级了我的php形式mysql在面向对象的方法中使用mysqli。我有理由相信这段代码有bug。我的目标是使用单例模式来保证每次脚本执行只有一个数据库连接。$db保存数据库链接
有人能验证
这行吗?return $one->$db->query($query);
语法看起来不正确。
class one
{
private static $single = NULL;
public $db = NULL;
public function __construct()
{
$this->db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
self::$single=1;
}
public static function make_one()
{
if(self::$single==NULL)
{
return new self();
}
}
}
/*database*/
class database
{
public function __construct()
{
one::make_one();
}
public static function arche_query($query)
{
return $one->$db->query($query);
}
}
改为
return one::make_one->db->query($query);
你的单例模式不正确单例模式应该只创建一个实例,在你的例子中不是这样的
class one
{
private static $_selfInstace;
public $db;// default is null so no need to assign
public function __construct()
{
$this->db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_DATABASE);
}
public static function getInstance()
{
if( !(self::$_selfInstace instanceof self) ) {
self::$_selfInstace= new self();
}
return self::$_selfInstace;
}
}
class database
{
public function __construct()
{
}
public static function arche_query($query)
{
return one::getInstance()->db->query($query);
}
}