Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Деструкторы в классах

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
bestbios
Отправлено: 03 Марта, 2014 - 07:26:48
Post Id



Гость


Покинул форум
Сообщений всего: 75
Дата рег-ции: Сент. 2013  


Помог: 1 раз(а)




Растолкуйте пожалуйста про деструкторы. В манах говорится что они вызываются при завершении работы скрипта:

PHP:
скопировать код в буфер обмена
  1. class MyDestruct {
  2.  
  3.         # Реализация конструктора.
  4.         function __construct() {
  5.                 echo '<div>Конструктор класса "MyDestruct"</div>';
  6.         }
  7.  
  8.         # Реализация Метода - echo_method.
  9.         public function echo_method() {
  10.                 echo '<div>Метод - echo_method класса "MyDestruct"</div>';
  11.         }
  12.  
  13.         # Реализация деструктора.
  14.         function __destruct() {
  15.                 echo '<div>Деструктор класса "MyDestruct"</div>';
  16.         }
  17.  
  18. }


PHP:
скопировать код в буфер обмена
  1. $_Class_MyDestruct = new MyDestruct();
  2. echo $_Class_MyDestruct->echo_method();
  3. echo '<div>Просто текст</div>';


Ожидается результат:

Цитата:
Конструктор класса "MyDestruct"
Метод - echo_method класса "MyDestruct"
Просто текст
Деструктор класса "MyDestruct"


То, что получаю я:

Цитата:
Конструктор класса "MyDestruct"
Метод - echo_method класса "MyDestruct"
Просто текст
 
 Top
Мелкий Супермодератор
Отправлено: 03 Марта, 2014 - 08:49:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Какая версия php?
Это весь скрипт или где-то ещё что-то?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class MyDestruct {
  3.         # Реализация конструктора.
  4.        function __construct() {
  5.                 echo '<div>Конструктор класса "MyDestruct"</div>';
  6.         }
  7.  
  8.         # Реализация Метода - echo_method.
  9.        public function echo_method() {
  10.                 echo '<div>Метод - echo_method класса "MyDestruct"</div>';
  11.         }
  12.  
  13.         # Реализация деструктора.
  14.        function __destruct() {
  15.                 echo '<div>Деструктор класса "MyDestruct"</div>';
  16.         }
  17. }
  18.  
  19.  
  20. $_Class_MyDestruct = new MyDestruct();
  21. echo $_Class_MyDestruct->echo_method();
  22. echo '<div>Просто текст</div>';


-----
PostgreSQL DBA
 
 Top
bestbios
Отправлено: 03 Марта, 2014 - 09:56:01
Post Id



Гость


Покинул форум
Сообщений всего: 75
Дата рег-ции: Сент. 2013  


Помог: 1 раз(а)




Проверил на сервере все - работает. Деструктор не отрабатывал в только редакторе.

Деструктор исполняется по завершению работы всего скрипта(файла), либо по завершению работы класса с ним?

(Отредактировано автором: 03 Марта, 2014 - 09:59:38)

 
 Top
Мелкий Супермодератор
Отправлено: 03 Марта, 2014 - 10:25:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Деструктор срабатывает, когда не остаётся ни одной ссылки на объект.
Т.е., например:
PHP:
скопировать код в буфер обмена
  1. $_Class_MyDestruct = new MyDestruct();
  2. unset($_Class_MyDestruct);
  3. echo '<div>Просто текст</div>';

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

Особое исключение из всех правил - если из конструктора объекта выбросить исключение, объект в памяти висеть будет, а его деструктор вызван никогда не будет.


-----
PostgreSQL DBA
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB