Где я могу закрыть соединение mysql в этой иерархии классов? - PullRequest
1 голос
/ 24 июля 2011

У меня есть 4 класса в PHP, которые я использую для регистрации пользователя, проблема в том, что я не знаю, как закрыть соединение mysql.

Класс звонков:

single_connect-> database-> пост-> Регистрация

Когда я реализую 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 ]

2 голосов
/ 24 июля 2011

Соединения автоматически закрываются, когда заканчивается выполнение скрипта.Так что если между последней операцией базы данных и концом сценария не будет огромного количества времени, я бы не стал явно закрывать соединение.

0 голосов
/ 24 июля 2011

Я нашел проблему.В своем объяснении о классах и статических свойствах Singleton я проверил, как PHP обрабатывает статические свойства.

"Как и любая другая статическая переменная PHP, статические свойства могут быть инициализированы только с использованием литерала или константы; выражения не допускаются. Поэтому покавы можете инициализировать статическое свойство целым числом или массивом (например), вы не можете инициализировать его другой переменной, возвращаемым значением функции или объектом. "http://php.net/manual/en/language.oop5.static.php

Вы не можете установить статическое свойство как объект, как вы можете в C ++, Java или большинстве других языков ООП.В этом случае соединение было закрыто, когда класс был GC.

Мои извинения перед prodigitalson, я был неверен в своих комментариях.

...