我正在OOP世界迈出第一步 - 请耐心等待 我知道同时打开许多正在进行的mySQL连接对于性能来说可能是致命的,因此建立一个考虑到这一点的数据库类应该是一个好主意。
每次都会$this->session->write(...);
导致新的mySQL连接被打开吗?
或者这取决于mySQL中的“持久连接”功能?
以下是代码:
abstract class database {
function __construct() {
//mysql_connect()
}
}
class session extends database {
function write () {
// mysql_query(--.)
}
}
答案 0 :(得分:1)
答案 1 :(得分:1)
会话处理程序是某种特殊类型的数据库吗?它不,所以不要使用继承(是关系)。会话处理程序使用数据库,因此您应该使用合成(具有关系):
class Session {
protected $db;
public function __construct(DB $db) {
$this->db = $db;
}
public function write() {
$this->db->query(...);
}
}
$db = new DB(...);
$session = new Session($db);
另外,请勿使用mysql_*()
个功能。使用功能更强大的PDO。
回到您的问题...每次创建新的mysql_connect()
对象时都会执行Database
。但是在这种情况下Session
是Database
类型的对象,因此每次编写new Database()
或new Session()
时都会调用构造函数,因此也会调用mysql_connect()
PS。如果已存在指定的连接,mysql_connect()
function将不会创建新连接。检查此函数的第4个参数以了解更多信息。
答案 2 :(得分:0)
为什么不
class database {
function __construct() {
//mysql_connect()
}
function write() {
//query the DB
}
}
我不确定语法,我不做OOP PHP。无论如何,在上面的结构中,将为每个“会话”实例打开一个新连接,因此假设您只创建一个“会话”实例,那么您将不会打开大量数据库连接。