我刚刚开始oop,现在,甚至非常简单的事情让我感到困惑! 这是我的mysqli连接类:
SetWindowPos
让我们说我会这样用:
class DB{
private $con;
public function __construct(){
$this->con=new mysqli('localhost','root','','dbName');
if(!$this->con){
echo '<b>There was a problem connecting to database! </b><br />errno: '.$con->connect_errno;
exit;
}
$this->con->set_charset("utf8");
}
public function query($query){
return $this->con->query($query);
}
}
我刚刚从类DB中创建了2个对象。 这是否意味着每个对象都有一个新的mysql连接?如果是的话,我该如何避免呢?
我知道我可以在__destruct()函数中使用mysqli_close()但我在某处读取(可能在这个网站:) :)创建和销毁几个mysql连接并不好。
我该怎么办? ps:旁边,正如我所说的我在oop(以及mysqli)中的新内容所以如果对我的课程有任何评论(例如我在正确的地方设置了字符集吗?)我将会这样做很荣幸。
答案 0 :(得分:1)
创建类的实例时,如果它正常工作,则无需重新创建它。
示例1
在你的问题中你做到了这一点:
$DB = new DB();
$test=$DB->query($query);
$DB2 = new DB();
$test2=$DB2->query($query2);
您可以这样做:
$DB = new DB();
$test = $DB->query($query);
$test2 = $DB->query($query2);
示例2
有时你有一个实例,你想在任何地方使用它。您可以在代码开头或第一次请求时创建它。然后你可以在任何地方使用它。
$DB = new DB();
function something(){
global $DB;
$test = $DB->query($query);
}
如果你的课程很简单,就像你在这里提到的那样,就像第一个例子一样使用它。此方法适用于需要从任何位置访问的实例。一个函数改变了它,另一个函数改变了它。
此方法也被认为是不好的做法,因为它会使您的代码更难以阅读和调试。
一些有用的链接: