За последние 24 часа нас посетили 51923 программиста и 1461 робот. Сейчас ищут 1328 программистов ...

Class удаляет сам себя. Как организовать.

Тема в разделе "PHP для новичков", создана пользователем running-frag, 28 окт 2009.

  1. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    Вопрос собнос не сложный. Но как его организовать не знаю. Уже второй день в гугле что то не нахожу нужного ответа. :( Собсно допустим :

    PHP:
    1.  
    2. class unit
    3. {
    4. function foo1() {...}
    5. function foo2() {...}
    6.  
    7. function destroy() {...}
    8. }
    9.  
    10. $cl = new unit();
    11. $cl->foo1;
    12. $cl->foo1;
    13.  
    14. $cl->destroy();
    15.  
    Вот... Вопрос прост, что писать в destroy() что бы получить эффект unset($cl)? Это вообще реально? Просто как дочерние классы удалять, на это постоянно натыкаюсь.... А про главный класс не слова. =\
     
  2. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    ппц. а как дочерние классы удалять-то?
     
  3. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
  4. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    А зачем?

    почему бы тебе не вызвать unset($cl)?
     
  5. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    Можно и unset(). Но я решил поинтересоваться... Авось есть "быстрое" решение.
    Просто не нужно следить за всем, достаточно одну функцию дописать, и вызывать её на любом этапе "если что". А не делать проверки и потом маятся с кодом. В конечно итоге получили б "или полный класс" или "ничего". В моменте безопасности тоже считаю пригодилось бы...
     
  6. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    Кстати заметил интересный момент. Если к примеру... :
    PHP:
    1.  class unit
    2.  {
    3.  function fooTop() {...}
    4.  function foo1() {@newOne(); ...}
    5.  function foo2() {...}
    6.  
    7.  function destroy() {...}
    8.  }
    9.  
    10.  $cl = new unit();
    11.  $cl->fooTop;  // something
    12.  $cl->foo1;     // none
    13.  $cl->foo2;     // none
    14.  
    15.  $cl->destroy();
    Т.е. если спецом вызвать неопределённую (отбалды) функцию, котора заведомо не существуется, проход по классу останавливает. И ничего не возвращается. Не понятен этот момент совершенно... =\ Кто нить может прокоментировать этот момент?
     
  7. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ты шутишь? unset и есть одна функция, которую даже писать не надо.

    Инстансы классов ты чем собрался убивать?

    $c = new Obj();
    $d = new Obj();

    Но одного я не пойму - зачем? Ты тянешь что-то жутко большое и долгоиграющее в память? Тебя начинает мучить недержание (утечки)?

    У тебя скрипт не работает часами. Он взлетел и умер. Можно вообще ничего не чистить.
     
  8. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Где останавливает? Кто останавливает?

    Брр... Вы о чем вообще?

    Наличие ошибок в коде всегда останавливает его выполнение, когда выполнение доходит до места ошибки.
     
  9. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    Ну это в принцепи то чего я и ожидал. Такого ответа. Просто хотел удостоверится...

    PS: Чего то я упустил этот момент "Он взлетел и умер. Можно вообще ничего не чистить."....
     
  10. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    В PHP воюют за то, чтобы он (скрипт) как можно быстрее и без ошибок отработал.

    За 0.05с-1с времени работы скрипта надо делать что-то совсем жуткое, чтобы память пришлось чистить вручную.

    Для демонов - отдельный вопрос, там уже можно и нужно думать об утечках. Но обычно люди которые решают писать демон на PHP понимают (ну или хотя бы имеют представление), что они делают и как бороться с последствиями.
     
  11. running-frag

    running-frag Активный пользователь

    С нами с:
    4 сен 2008
    Сообщения:
    65
    Симпатии:
    0
    А вот это моя вторая ошибка. Теперь всё ясно. СПС. :) Я в php не очень давно. Не правильно понял "@" ...
     
  12. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Это подавление ошибок.

    В смысле не выведение сообщения об ошибке на экран. Но сама ошибка остается.

    Да, стоит еще помнить, что ряд ошибок обнаруживаются еще на этапе парсинга кода.
    А остальные только в процессе выполнения. И если код во время работы никогда не заходит в ветвление с ошибкой, то такую ошибку можно не замечать месяцами.
     
  13. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Simpliest
    Я вот, зомбарей мочу, а ты?
     
  14. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Kreker
    А я 4й раз переписываю приложение.
    Как в том анекдоте блин.

    Что ни начну делать, все время пулемет получается.
     
  15. noisiaman

    noisiaman Активный пользователь

    С нами с:
    25 окт 2009
    Сообщения:
    5
    Симпатии:
    0
    Что-то я не понял, надо "убивать" объект или класс? Если первое...
    $c = new Obj();
    /* Code... */
    $c = NULL;
    @unset($c);
     
  16. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Как убить класс? Вот так:
    unlink(__FILE__);
    :D