Здравствуйте! У меня возникла следующая проблема. В один из классов я вписал деструктор, который выполняет отсоединение от базы данных. На моей локальной машине (PHP 5.2.1) он выполняется как положено, после выполнения всех сценариев во время удаления всех объектов. На удаленном сервере (PHP 5.2.3) деструктор исполняется во время выполнения сценариев, т.е. перед тем когда начинается построение страницы. У меня несколько классов наследуются друг у друга. В последнем классе как раз и установлен деструктор. В чем может быть причина?
Обсуждалось уже, как то... похожее... вот тут - http://php.ru/forum/viewtopic.php?t=4412 и вот тут - http://forum.phpc.ru/topic/195.0 не связано ли с твоим случаем?
Причина похожая, но мне не понятно как можно избежать этой проблемы. Вот мой код: PHP: <?php class test { function __construct() { echo 'Конструктор<br>'; } function test() { echo 'Hello, World!<br>'; } function __destruct() { echo 'Деструктор'; } } $object=new test; $object->test(); ?> PHP 5.2.1: Конструктор Hello, World! Деструктор PHP 5.2.3: Конструктор ДеструкторHello, World! Деструктор Как можно изменить этот код так, чтобы все работало нормально как в первом результате? В ООП я только начинаю работать. Объясните это все подробнее. Спасибо.
_AVS_ Если на PHP 5.2.3 этот фрагмент кода действительно отрабатывает так как ты написал, то это явный баг PHP. Пиши на bugs.php.net (хотя не советую, смысла нет, все равно ответят что "так и надо" ).
Да, отрабатывает именно так. Я очень удивился когда залил на хостинг, работающий с поддержкой PHP 5.2.3.
_AVS_ У меня нет установленной версии 5.2.3, чтобы проверить. Но если ты прав - это конечно скандал, немало скриптов помимо твоего начнут валиться с ошибками. Попробуй уговорить хостера либо откатиться до 5.2.1, либо подняться до 5.2.4, хотя в списке изменений для этой версии я не нашел ничего, связанного с деструкторами.
1. Попросил друга проверить на 5.2.3 - у него все нормально. 2. У тебя название функции test совпадает с именем класса. Видимо, PHP принимает ее за некий "альтернативный конструктор". Два конструктора - два деструктора... хотя это все равно было бы ошибкой.
PHP: <?php class test { function __construct() { echo 'Конструктор<br>'; } function tester() { echo 'Hello, World!<br>'; } function __destruct() { echo 'Деструктор'; } } $object=new test; $object->tester(); ?> Только что проверил на удаленной машине. Исполнилось так же! Я еще раз проверил - у них точно стоит 5.2.3! Я вчера обновлял сайт. Деструктор отсоединялся от базы не успев построить страницу. Я не мог понять в чем проблема. Я в шоке. Я написал в техподдержку хостинга.