【发布时间】:2011-07-23 21:36:44
【问题描述】:
我有 4 个 PHP 类用于注册用户,问题是我不知道如何关闭 mysql 连接。
类调用:
single_connect->数据库->post->注册
当我在单例中实现 mysql_close() 时,它会破坏我的代码。我的假设是,只要创建了一个注册对象,它所扩展的类也是“实例化的”。但情况似乎并非如此。
我必须注释掉 mysql_close 才能让它工作。请注意,我的单例使用数据库链接来确定它是否存在,然后像大多数单例一样使用指向自身的指针。
/*single_connect*/
class single_connect
{
private static $_db_pointer = NULL;
private function __destruct()
{
//mysql_close();
}
private function __construct()
{
self::$_db_pointer = mysql_connect(DB_HOST, DB_USER, DB_PASS);
mysql_select_db(DB_DATABASE);
}
public static function get_connection()
{
if(self::$_db_pointer == NULL)
{
return new self();
}
}
}
/*database*/
abstract class database
{
protected function __construct()
{
single_connect::get_connection();
}
protected static function query($query)
{
$result = mysql_query($query) or die(mysql_error());
return $result;
}
}
/*post*/
class post extends database
{
public $_protected_arr=array();
protected function __construct()
{
parent::__construct();
$this->protect();
}
protected function protect()
{
foreach($_POST as $key => $value)
{
$this->_protected_arr[$key] = mysql_real_escape_string($value);
}
}
}
/*signup*/
class signup extends post
{
...
【问题讨论】:
-
你为什么要关闭连接?
-
如果你不再需要它,你通常会关闭 mysql 连接。你的场景什么时候会出现这种情况?
-
不,通常不会关闭 PHP 中的连接,因为它不需要,因为请求很快就会完成,正如已经说过的那样。
-
不错的 OOP 编程,我不同意您不应该关闭连接。如果您使用的是持久连接,则无需关闭它。但否则自己关闭它,IMO,好习惯。
-
@Alan:这是一个可怕的想法,除非它自动重新打开。您永远无法确定查询将从何处发出或由哪个对象发出,因此您不应该在脚本完成之前关闭连接。由于这是自动处理的,因此没有理由手动进行。现在释放你经常需要做的语句和结果集,但这完全不同。