我在PHP中有4个类,我用来注册用户,问题是我不知道如何关闭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
{
...发布于 2011-07-24 05:41:06
当脚本执行完成时,连接会自动关闭。因此,如果在最后一次数据库操作和脚本结束之间没有大量的时间,我就不会费心显式地关闭连接。
发布于 2011-07-24 11:58:30
我找到问题了。在我关于单例类和静态属性的解释中,我检查了PHP如何处理静态属性。
“与任何其他PHP静态变量一样,静态属性只能使用文字或常量进行初始化;不允许使用表达式。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您不能将其初始化为另一个变量、函数返回值或对象。”http://php.net/manual/en/language.oop5.static.php
您不能像在C++、Java或大多数其他OOP语言中那样将静态属性设置为对象。在这种情况下,当类被GC时,连接是关闭的。
我向prodigitalson道歉,我的评论是错误的。
https://stackoverflow.com/questions/6803466
复制相似问题