0
我有一个PHP单例模式的问题,特别是关于实现一个mysqli包装。PHP单例模式为mysqli包装
class DbHandler
{
private $mysqli;
private $query;
private $results = array();
private $numRows = 0;
public static $instance;
public static function getInstance() {
if (!isset(self::$instance)) {
self::$instance = new DbHandler;
}
return self::$instance;
}
public function __construct() {
$this->mysqli = new mysqli("127.0.0.1", "root", "", "improved_portal");
if ($this->mysqli->connect_error) {
die($this->mysqli->connect_error);
}
}
public function query($statement) {
if ($this->query = $this->mysqli->query($statement)) {
foreach ($this->query as $value) {
$this->results[] = $value;
}
$this->numRows = $this->query->num_rows;
return $this;
}
}
public function getResults() {
return $this->results;
}
public function getNumRows() {
return $this->numRows;
}
}
当我去利用其他对象中的类时,我似乎对结果有问题。而不是每次创建一个新的对象具有唯一的$结果,似乎我正在创建初始对象的副本。例如...
$object1 = DbHandler::getInstance();
$object1->query("SELECT * FROM table_a")->getResults();
$object2 = DbHandler::getInstance();
$object2->query("SELECT * FROM table_b")->getResults();
$ object2包含两个查询的结果,这显然不是我所期望的。查询函数清楚地循环遍历第二个查询的结果,并将它们附加到第一个对象的$ results属性中。我应该如何调用DbHandler类的新实例,以便每个对象都包含唯一属性?
你应该让你的'__construct()'方法和'$ instance'财产私有的,只能使用你的类的静态'的getInstance()'方法来创建一个对象。 –
'$ this-> results'每次都必须__cleared__ –