也许你可以提供帮助。我有一个创建MySql连接的主类。然后我扩展这个课程。除非我做了父:: __ construct();否则我无法访问连接;最近这样做的时候,我收到一条错误消息,说我没有联系。
那么如何对其进行编程以使其不会耗尽连接并且可以访问数据库连接。
class Common
{
var $mysql;
function __construct()
{
$this->mysql=new mysqli($this->dbHOST, $this->dbUSERNAME, $this->dbPASSWORD, $this->dbNAME);
}
}
class Role extends Common {
function __construct()
{
parent::__construct();
}
}
答案 0 :(得分:0)
确保在销毁对象时关闭连接。也就是说,添加一个关闭连接的__destruct()
方法。
如果Common
类是在__construct()
方法中打开连接的类,那么它应该是用__destruct()
方法关闭它的那个。如果您没有在__destruct()
类上定义Role
方法,那么PHP似乎不会自动调用父项__destruct()
。 (但我没有测试过这个。)一个简单的解决方案是添加一个只调用__destruct()
的存根parent::__destruct()
方法。
答案 1 :(得分:0)
我认为您的类结构存在一个基本问题:您不需要每个对象的连接,您只需要每个对象的连接资源的副本。
我首选的方法是创建一个具有单例调用的数据库处理程序。现在可以在任何地方调用它,它将始终返回相同的连接处理程序。这也是隐藏自动初始化的绝佳方法。
解决方案的实现是,表示数据库行的类实际上与 数据库连接的类完全不同。一个应用程序将处理许多行,但很少,如果有的话,将处理多个连接。另一种说法是IS-A和HAS-A定义之间的区别:说“数据库行类IS-A数据库连接”是没有意义的。说“数据库行类HAS-A数据库连接”确实有意义。