PHP __Constructor & __Destructor Вопросы - PullRequest
2 голосов
/ 19 августа 2009

Я пытался изучить объектно-ориентированную сторону PHP, и мне было интересно:

Если бы я использовал _constructor для открытия соединения с базой данных, использовал функцию в этом классе (например, insert), будет ли определенный __destructor закрывать соединение после выполнения метода «insert»?

class data(){
  function __constructor {
    // connect to db
  }

  function insert($data){
    // mysql_query(...)
  }

  function __destructor {
    // close connection to db
  }
}

$obj = new db();
$obj->insert('mumbo jumbo');

Или соединение с базой данных будет по-прежнему открыто? Потому что я прочитал, что деструктор запускается только если объект уничтожен. Но как вы уничтожаете объект?

Ответы [ 5 ]

6 голосов
/ 19 августа 2009

В PHP объект уничтожается, когда выходит из области видимости. Обычно это происходит, когда скрипт прекращает выполнение или когда функция, в которой он был создан, завершается, но вы можете уничтожить объект в начале кода, используя:

unset($my_variable);  

Так что, чтобы ответить на ваш вопрос, у вас должно получиться, что деструктор в большинстве случаев будет обрабатывать закрытие БД для вас, особенно с небольшими сценариями.

3 голосов
/ 19 августа 2009

Да, это будет работать нормально, если вы используете правильные имена __construct() и __destruct() для своих конструкторов и деструкторов, в отличие от того, что у вас там есть.

2 голосов
/ 19 августа 2009

Объект уничтожается, когда на него больше нет ссылок, например, путем unset() установки последней переменной, содержащей объект, или когда выполнение скрипта прекращается.

Кстати, магические методы называются __construct и __destruct, без трейлинга -or.

1 голос
/ 19 августа 2009

Кстати, конструкторы и деструкторы называются __construct и __destruct.

Деструктор

__ будет вызван, когда больше нет ссылок на db. Обычно это происходит, когда объект выходит из области видимости, но если вы сохранили другие ссылки на него, этого не произойдет. Вы можете удалить ссылки на db, используя

unset($obj);

и аналогично, если вы храните $ obj где-либо.

0 голосов
/ 19 августа 2009

Имейте в виду, что PHP также поддерживает постоянные соединения с базами данных, что означает, что даже если ваш объект был уничтожен, соединение с БД все еще открыто "в фоновом режиме" и будет повторно использоваться при вызове соответствующего pconnect (или Аналог PDO) в следующий раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...