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 Форумы портала PHP.SU :: Версия для печати :: Как удалять объекты?
Мы создаем экземпляр этого класса и хотим работать с ним, грубо говоря, на всех страницах сайта. Для этого используем сессии и перед использованием объекта на этих страницах пишем:
С закрытием сессий понятно ))
Мне просто пока непривычны в PHP некоторые вещи:
нетипизированность (явная) переменных (от этого и сомнение, что при удалении сессии, корректно удалится объект с вызовом деструкторов и т. д.);
ну и самая большая проблема - передача объектов между страницами - очень сложно привыкнуть )). Я пока усвоил три способа передачи: через сессии, методом POST со скрытыми формами и GET через URL. Все эти способы ненадежны, второй и третий еще и не удобны совсем )).
Может, быть я чего-то там пропустил, но эти все вещи понятны.
Мой же вопрос был о сборке мусора. Я привык к С++, а там нужно самому заботится об этом. В PHP, как я понял, сборка мусора делается автоматически.
Т.е. если в моем примере (см. первый пост) я потеряю сессию, объект класса (на который ссылается переменная сессии) все равно будет уничтожен, когда не останется ни одного указателя на него. Правильно? Меня интересует, когда это будет сделано и как это проверить можно.
Веб-программирование отличается от обычного вообще-то.
Ваш скрипт "забывает" о своем текущем выполнении сразу после того, как оно заканчивается. Соответственно все созданные объекты уничтожаются после выполнения.
EuGen, я вот вижу у себя несколько другое. Пример в п. 1 работает, и я через сессии передаю указатель на объект, созданный в одном скрипте, в другой скрипт (грубо говоря, объект создается на одной странице, а используется на многих других)
Дестркуторы не вызываются если копия объекта хранится в сессии, а сервер удаляет файл сессии по таймауту.
А если удаляете сессию через php то сначала удаляйте объект, а потом саму сессию.
valenok, спасибо, понял уже.
Видимо, это порочная практика, так с сессиями работать. Совершенно непонятно, когда объект удалять, когда эту сессию закрывать. В моем случае, объект должен жить все время, пока пользователь на сайте находится, и удаляться, когда сайт покидает.
Есть способы так сделать? Или мне совсем надо мозг перестраивать? )))))
Скорее всего, придется переделать.
Объекты могут использовать достаточно большое количество ресурсов, освобождение которых я не могу контролировать. При большом количестве пользователей это фигово ))