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]   

> Описание: Нужен объект класса, действующий на всех страницах...
TarTar
Отправлено: 13 Февраля, 2008 - 16:28:37
Post Id


Новичок


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


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




Привет!

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();

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

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


Алексей.
 
 Top
valenok Модератор
Отправлено: 13 Февраля, 2008 - 17:31:26
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




http://phpfaq[dot]ru/sessions
Там поищите о том как долго живут сессии


-----
Truly yours, Sasha.
 
My status
 Top
TarTar
Отправлено: 13 Февраля, 2008 - 17:54:48
Post Id


Новичок


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


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




Спасибо, valenok!

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

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

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

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

Алексей
 
 Top
scuter
Отправлено: 14 Февраля, 2008 - 09:43:20
Post Id



Посетитель


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


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




почитай доку
http://php.su/learnphp/phpoo/
и статьи
http://php.su/articles/?cat=oop
 
 Top
TarTar
Отправлено: 14 Февраля, 2008 - 22:00:32
Post Id


Новичок


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


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




Спасибо, scuter!

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

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

Алексей.
 
 Top
EuGen Администратор
Отправлено: 15 Февраля, 2008 - 09:26:19
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


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




Веб-программирование отличается от обычного вообще-то.
Ваш скрипт "забывает" о своем текущем выполнении сразу после того, как оно заканчивается. Соответственно все созданные объекты уничтожаются после выполнения.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
valenok Модератор
Отправлено: 15 Февраля, 2008 - 10:44:36
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




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


-----
Truly yours, Sasha.
 
My status
 Top
TarTar
Отправлено: 16 Февраля, 2008 - 14:42:44
Post Id


Новичок


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


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




EuGen, я вот вижу у себя несколько другое. Пример в п. 1 работает, и я через сессии передаю указатель на объект, созданный в одном скрипте, в другой скрипт (грубо говоря, объект создается на одной странице, а используется на многих других)

valenok, а нафига они тогда нужны?
 
 Top
valenok Модератор
Отправлено: 16 Февраля, 2008 - 14:47:39
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Дестркуторы не вызываются если копия объекта хранится в сессии, а сервер удаляет файл сессии по таймауту.
А если удаляете сессию через php то сначала удаляйте объект, а потом саму сессию.


-----
Truly yours, Sasha.
 
My status
 Top
TarTar
Отправлено: 16 Февраля, 2008 - 15:44:02
Post Id


Новичок


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


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




valenok, спасибо, понял уже.
Видимо, это порочная практика, так с сессиями работать. Совершенно непонятно, когда объект удалять, когда эту сессию закрывать. В моем случае, объект должен жить все время, пока пользователь на сайте находится, и удаляться, когда сайт покидает.
Есть способы так сделать? Или мне совсем надо мозг перестраивать? )))))

Алексей.
 
 Top
valenok Модератор
Отправлено: 16 Февраля, 2008 - 16:55:09
Post Id



Здесь могла бы быть ваша реклама


Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006  
Откуда: Israel


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




Можете оставить как есть,
только попробуйте обойтись без деструкторов


-----
Truly yours, Sasha.
 
My status
 Top
TarTar
Отправлено: 17 Февраля, 2008 - 14:15:13
Post Id


Новичок


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


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




Скорее всего, придется переделать.
Объекты могут использовать достаточно большое количество ресурсов, освобождение которых я не могу контролировать. При большом количестве пользователей это фигово ))

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

Алексей.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB