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.SU » PHP » Программирование на PHP » Как удалять объекты?

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

1. TarTar - 13 Февраля, 2008 - 16:28:37 - перейти к сообщению
Привет!

PHP5

Есть некий класс, например:
CODE (text):
скопировать код в буфер обмена
  1. class cOne{
  2.    var $c;
  3.    function get(){};
  4.    function set(){};
  5. }

Мы создаем экземпляр этого класса и хотим работать с ним, грубо говоря, на всех страницах сайта. Для этого используем сессии и перед использованием объекта на этих страницах пишем:
CODE (text):
скопировать код в буфер обмена
  1. session_start();
  2. $one = NULL;
  3. if( isset( $_SESSION['one'] ) )
  4.    $one = $_SESSION['one'];
  5. else{
  6.    $one = new cOne;
  7.    $_SESSION['one'] = $one;
  8. }

Затем нормально с ним работаем
CODE (text):
скопировать код в буфер обмена
  1. $one->get();
  2. $one->set();

Все это вроде работает, но есть беспокойство по поводу удаления этого объекта.

Удаляется ли он корректно?
Когда он удаляется?
Как проверить его удаление?


Алексей.
2. valenok - 13 Февраля, 2008 - 17:31:26 - перейти к сообщению
http://phpfaq[dot]ru/sessions
Там поищите о том как долго живут сессии
3. TarTar - 13 Февраля, 2008 - 17:54:48 - перейти к сообщению
Спасибо, valenok!

С закрытием сессий понятно ))
Мне просто пока непривычны в PHP некоторые вещи:

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

ну и самая большая проблема - передача объектов между страницами - очень сложно привыкнуть )). Я пока усвоил три способа передачи: через сессии, методом POST со скрытыми формами и GET через URL. Все эти способы ненадежны, второй и третий еще и не удобны совсем )).

Мож еще чего есть? )))

Алексей
4. scuter - 14 Февраля, 2008 - 09:43:20 - перейти к сообщению
почитай доку
http://php.su/learnphp/phpoo/
и статьи
http://php.su/articles/?cat=oop
5. TarTar - 14 Февраля, 2008 - 22:00:32 - перейти к сообщению
Спасибо, scuter!

Может, быть я чего-то там пропустил, но эти все вещи понятны.

Мой же вопрос был о сборке мусора. Я привык к С++, а там нужно самому заботится об этом. В PHP, как я понял, сборка мусора делается автоматически.
Т.е. если в моем примере (см. первый пост) я потеряю сессию, объект класса (на который ссылается переменная сессии) все равно будет уничтожен, когда не останется ни одного указателя на него. Правильно? Меня интересует, когда это будет сделано и как это проверить можно.

Алексей.
6. EuGen - 15 Февраля, 2008 - 09:26:19 - перейти к сообщению
Веб-программирование отличается от обычного вообще-то.
Ваш скрипт "забывает" о своем текущем выполнении сразу после того, как оно заканчивается. Соответственно все созданные объекты уничтожаются после выполнения.
7. valenok - 15 Февраля, 2008 - 10:44:36 - перейти к сообщению
и деструкторы не вызываются.
8. TarTar - 16 Февраля, 2008 - 14:42:44 - перейти к сообщению
EuGen, я вот вижу у себя несколько другое. Пример в п. 1 работает, и я через сессии передаю указатель на объект, созданный в одном скрипте, в другой скрипт (грубо говоря, объект создается на одной странице, а используется на многих других)

valenok, а нафига они тогда нужны?
9. valenok - 16 Февраля, 2008 - 14:47:39 - перейти к сообщению
Дестркуторы не вызываются если копия объекта хранится в сессии, а сервер удаляет файл сессии по таймауту.
А если удаляете сессию через php то сначала удаляйте объект, а потом саму сессию.
10. TarTar - 16 Февраля, 2008 - 15:44:02 - перейти к сообщению
valenok, спасибо, понял уже.
Видимо, это порочная практика, так с сессиями работать. Совершенно непонятно, когда объект удалять, когда эту сессию закрывать. В моем случае, объект должен жить все время, пока пользователь на сайте находится, и удаляться, когда сайт покидает.
Есть способы так сделать? Или мне совсем надо мозг перестраивать? )))))

Алексей.
11. valenok - 16 Февраля, 2008 - 16:55:09 - перейти к сообщению
Можете оставить как есть,
только попробуйте обойтись без деструкторов
12. TarTar - 17 Февраля, 2008 - 14:15:13 - перейти к сообщению
Скорее всего, придется переделать.
Объекты могут использовать достаточно большое количество ресурсов, освобождение которых я не могу контролировать. При большом количестве пользователей это фигово ))

Беду мозг переделывать )))

Алексей.

 

Powered by ExBB FM 1.0 RC1