2009-08-19 2 views
2

Я пытался узнать объектно-ориентированном стороне PHP и было интересно:PHP __Constructor & __Destructor Вопросы

Если я использовал _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'); 

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

+0

Я думаю, вы имеете в виду $ obj = новые данные(), а не db(), так как вы вызывали данные своего класса. Вы указываете постоянные соединения. Какой метод соединения mysql вы используете? Я думаю, что mysql_pconnect() - единственный способ создать постоянное соединение с mysql. –

+0

не воспринимайте мой код выше слишком серьезно, я просто пытался понять свою точку зрения. Мой главный вопрос выше заключался в том, чтобы обеспечить безопасное соединение, открыв и закрыв соединение с БД, когда это необходимо, а некоторые - как повысить безопасность и производительность веб-сайта ... – chutsu

ответ

6

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

unset($my_variable); 

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

+2

Обратите внимание, что эта строка приведет только к тому, что объект будет освобожден и его деструктор вызывается, если «$ my_variable» - это последнее, что указывает на объект. – chaos

3

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

2

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

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

1

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

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

unset($obj); 

и также, если вы сохранили $ OBJ в любом месте.

0

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

+0

Чтобы уточнить, PHP поддерживает постоянные соединения, если вы используете mysql_pconnect(), который, вообще говоря, нахмурился. Все остальные методы подключения mysql, AFAIK, автоматически закрываются, когда скрипт завершил выполнение. –

+0

О, есть другие, кроме mysql_pconnect, такие как pg_pconnect, sybase_pconnect и т. Д. . Лучше всего в мире делать пулы соединений, вы абсолютно правы в этом. Я просто подумал, что это подходящее место, чтобы упомянуть об этом, поскольку речь шла о «закрытии соединения с базой данных». –

Смежные вопросы