Удаление всех переменных не завершая самого скрипта!

Тема в разделе "PHP", создана пользователем bugargen, 7 дек 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. bugargen

    bugargen

    Регистр.:
    24 апр 2008
    Сообщения:
    232
    Симпатии:
    19
    Как можно в ходе выполнения скрипта удалить все переменные, которые были ранее объявлены?

    Просто мне нужно пустить скрипт по кругу, обычным циклом, а множество переменных могут иметь остатки данных после предыдущего шага цикла.

    PHP:
    <?php
    #################
    # Это 'index.php'
    #################

    for ( $i 0$i <= 5$i++ )
    {
        require_once 
    'script.php';

        
    # Здесь нужно очистить все переменные (кроме $i).
    }

    ?>
    PS: За 'script.php' скрывается множество других скриптов, которые вызывают друг-друга, он просто главный, скажем так, не считая 'index.php', в котором этот цикл собственно и запускается :)
     
    Extalionez нравится это.
  2. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    В пхп нельзя просто взять массово убить все переменные кроме каких-то. Ведь тогда могу убится нужные, поэтому надо убивать точечно через unset();

    PHP:
    unset($var1$var2$var3);
     
  3. _AlexSK_

    _AlexSK_ Постоялец

    Регистр.:
    30 окт 2008
    Сообщения:
    59
    Симпатии:
    8
    Наверное лучше вызывать script.php из командной строки нужное количество раз.
     
  4. bugargen

    bugargen

    Регистр.:
    24 апр 2008
    Сообщения:
    232
    Симпатии:
    19
    Жаль, очень жаль :(
    Хотя, по идеи, могли бы придумать такую ф-цию. Ведь это очевидно - есть переменные, которые PHP создаёт-мусолит, а есть, которые явно прописаны в скрипте - вот их и нужно удалять. В общем - х.з. :confused:
    Я ещё когда начинал писать этот скрипт - думал, что может лучше подчищать за собой переменные, но смысла в этом небыло никакого, только с точки зрения грамотности кода. А теперь - понадобилось, но все их перебирать сложно. О причине такой необходимости ниже...

    Можно и Крон заюзать. Но это всё мне не подходит совершенно!
    Мне нужен не просто запуск скрипта несколько раз, а запуск скрипта столько раз, сколько встретится каталогов в указанной директории + к этому наименования этих каталогов идут в качестве передаваемого значения + счётчик.

    В общем, придётся идти длинным путём...

    Спасибо :)
     
  5. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    В чем проблема вручную удалять крупные переменные? В конце концов, можете сами написать свой сборщик мусора, в чем проблема то?
     
  6. _AlexSK_

    _AlexSK_ Постоялец

    Регистр.:
    30 окт 2008
    Сообщения:
    59
    Симпатии:
    8
    Да, в таком случае, лучше пройтись по файлам-скриптам и подчистить за собой переменные. По-идее, это не займет много времени.
     
  7. potuga

    potuga

    Регистр.:
    22 сен 2009
    Сообщения:
    376
    Симпатии:
    91
    А лучше всего взять за правило перед использованием той переменной, где потенциально могут содержаться ненужные данные, всегда юзать unset() и проблем потом не будет ;)
     
  8. ZCFD

    ZCFD

    Регистр.:
    16 янв 2008
    Сообщения:
    989
    Симпатии:
    437
    1)require_once ? так он пордключится всего один раз. По определению
    так что там должно быть require. ну или я не понял идею и прошу мне объяснить. Т.к. интересно )))
    2) я хз конечно. просто пердположение --- вынеси require('script.php'); в отдельную функцию и в цикле вызывай уже эту функцию. Т.е. итерация заканчивается после выполнения scripts.php. При вызове функции все созданные в ней переменные являются локальными по умочанию. И при выходе из функции должны удаляться. -- В теории.


    PHP:
    <?php
    #################
    # Это 'index.php'
    #################
    // тут подключаешь файл
    function req()
    {
     require(
    'script.php');
    }

    for ( 
    $i 0$i <= 5$i++ )
    {
        
    req();
    }

    ?>
     
  9. RolCom

    RolCom

    Регистр.:
    12 мар 2008
    Сообщения:
    351
    Симпатии:
    108
    В других языках для этого есть переменные с лексической областью видимости, т.е. видимые до конца текущего блока. PHP может быть когда-нибудь поправят, но точно не раньше 6-ой версии.
    Вызывай файл внутри функции.
     
  10. bugargen

    bugargen

    Регистр.:
    24 апр 2008
    Сообщения:
    232
    Симпатии:
    19
    Похоже, это действительно работает ТОЛЬКО в теории :)
    После использования этого метода - сразу полезла куча варнингов с указанием на то, что очередной параметр в очередную функцию не передался (этих ф-ций у меня множество, как и модулей, в которых они содержатся). х.з. почему так, не смог разобраться... Видимо, переменные перестали быть глобальными (где они объявляны таковыми), или ещё что-то...

    Короче я решил пройтись по всем модулям и в конце каждого прописать уничтожение всех использованных в нём переменных. На будущее - возьму это за правило: в конце кода каждого модуля - отдельный блок, посвящённый обнулению/удалению переменных.

    Спасибо :)
     
Статус темы:
Закрыта.