【发布时间】:2014-04-14 22:20:30
【问题描述】:
我在为多个类使用的 mysqli 对象构建单例类时遇到了一些问题。我最初收到错误Access to undeclared static property: database::$DBH,我不明白,因为该属性不是静态的。我推测这可能是因为phpversion() 返回了 5.2.17 并且我发现单例模式只能使用 >5.3 版本来完成? (可能完全错误)。我调查了一下,发现我的服务器提供商允许我选择我可以使用的 PHP 版本。我目前选择了 5.3.3,但同样的错误。要么我必须等待服务器“刷新”它的设置。或者我在 5.3.3 版本中确实存在合法错误
class database{
private$DBH;
private static$singleton;
protected function __construct(){
$this->$DBH=new mysqli(HOST,USER,PASSWORD,DATABASE);
//also tried self::$DBH;
//if(mysqli_connect_errno())print_r(mysqli_connect_error());
}
public static function instance(){
if(!(self::$singleton instanceof self))self::$singleton=new self();
return self::$singleton;
}
public static function get(){
return self::instance()->$DBH;
}
private function __wake(){}
private function __clone(){}
}
class test{
public function __construct(){
$get=database::get()->prepare('SELECT column FROM table');
$get->execute();
$get->bind_result($col);
while($get->fetch()){
print($col."\n");
}
//$get->close(); not required.
}
}
$t=new test();
是否有任何替代方案可以让我尝试实现? (与多个类一起使用的单个 mysqli 对象,也是标准对象的“安全”方法。)
我应该用 mysqli 扩展我的数据库类吗?
我应该只使用 PDO 吗?
或者还是更好!找一个更好的服务器提供商,他们的服务是最新的。
【问题讨论】:
标签: php class oop mysqli singleton