我在哪里可以关闭此类层次结构中的mysql连接?

时间:2011-07-23 21:36:44

标签: php mysql class hierarchy

我在PHP中有4个类用于注册用户,问题是我不知道如何关闭mysql连接。

班级电话:

single_connect->数据库 - >后置信令>注册

当我在单例中实现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 
  { 
 ...

2 个答案:

答案 0 :(得分:2)

脚本执行完成后,会自动关闭连接。因此,如果最后一次数据库操作和脚本结束之间没有大量时间,我就不会费心去关闭连接了。

答案 1 :(得分:0)

我发现了问题。在我对Singleton类和静态属性的解释中,我检查了PHP如何处理静态属性。

“与任何其他PHP静态变量一样,静态属性只能使用文字或常量初始化;不允许使用表达式。因此,虽然您可以将静态属性初始化为整数或数组(例如),但您可能无法初始化它到另一个变量,一个函数返回值,或一个对象。“ http://php.net/manual/en/language.oop5.static.php

您不能像在C ++,Java或大多数其他OOP语言中那样将静态属性设置为对象。在这种情况下,当课程是GC时,连接正在关闭。

我向prodigitals道歉,我在评论中说错了。