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

Статус
В этой теме нельзя размещать новые ответы.
После использования этого метода - сразу полезла куча варнингов с указанием на то, что очередной параметр в очередную функцию не передался (этих ф-ций у меня множество, как и модулей, в которых они содержатся). х.з. почему так, не смог разобраться... Видимо, переменные перестали быть глобальными (где они объявляны таковыми), или ещё что-то...
похоже и на практике это работает

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

Я приведу общий вид того, что я пытался сделать по твоему совету..

PHP:
# index.php

function req ()
{
    require 'script1.php';
    require 'script2.php';
}

for ( $i = 0; $i < 5; $i++ )
{
    req ();
}
script1 - это предварительная подготовка к основной работе... ну там парсинг, чистка и т.д.

script2 - это скрипт, который вызывает и отправляет данные в кучу других скриптов, которые, в свою очередь, также отправляют данные и вызывают другие скрипты...

script1 проходит гладко. А вот script2 уже начинает косячить, а именно тогда, когда вызываемые им модули (скрипты) пытаются получить из него данные. Они, походу, просто не передаются (ерроры по типу: неверная строка, неверные/отсутствующие элементы массива и т.д.). Я думаю, что это как-то связано с использованием ГЛОБАЛЬНЫХ переменных (моих глобальных переменных, которые я сам таковыми объявил global param и т.д...).

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

если ты объявил переменную значит она нужна, при повторном вызове ( если ты меняешь ее значение ) она просто перезапишется. Я банально не вижу смысла удалять и создавать перемнную снова.

т.е. мне непонятен смысл

for($i=1;$i<=COUNT;$i++)
{
global $a;
use($a);
// а вот в этом я смысла не вижу
unset($a);
}
это если схематично
 
Значит есть смысл :)
Значит не все переменные переопределяются :)

Обсуждение можно заканчивать..

Спасибо всем за участие в дискуссии :ay:
 
в PHP есть суперглобальный ассоциаотивный массив $GLOBALS , который можно почистить в foreach-е
PHP:
<?php
function delete_global_key()
	{
	static $none_delete_key=array();
	if(count($none_delete_key)==0)
		foreach($GLOBALS as $key=>$value)
			$none_delete_key[]=$key;
	else
		foreach($GLOBALS as $key=>$value)
			if(!in_array($key,$none_delete_key))
				unset($GLOBALS[$key]);
	}
delete_global_key();//первый вызов запоминает существующие глобальные переменные, и в дальнейшем их не трогает
//то есть первый вызов нужно разместить до основного кода
echo '<pre>';
print_r($GLOBALS);
echo '</pre>';
$asd='asd';
echo '<pre>';
print_r($GLOBALS);
echo '</pre>';
delete_global_key();//второй и последующие вызовы удаляют все глобальные переменные кроме запомненных в первый раз
echo '<pre>';
print_r($GLOBALS);
echo '</pre>';
?>
в вашем случае я бы применил эту функцию так:
PHP:
for ( $i = 0; $i <= 5; $i++ )
{
delete_global_key();//переменная $i будет запомнена и не будет удалятся, в отличии от всех далее созданных
    require_once 'script.php';

    # Здесь нужно очистить все переменные (кроме $i).
}
 
Смотри в сторону get_defined_vars()
 
А если просто
PHP:
$GLOBALS = array();

Я попробовал - вроде работает, и вроде ничего страшного не сотворило, все как автор хотел..
 
А если просто
PHP:
$GLOBALS = array();
Я попробовал - вроде работает, и вроде ничего страшного не сотворило, все как автор хотел..
а если его скрипт использует какие-то из предопредленных переменных?
мой вариант является более универсальным, так как сохраняет переменные которые были до первого вызова.
я уж не говорю о том, что ТС судя по всему остался доволен предложенным вариантом, и после этого тема не поднималась полтора иесяца
 
Я когда-то делал такую штуку. В конце выполнения скрипта делал редирект на другой скрипт, в котором отсчитывал одну секунду и редиректил обратно. Правда на практике оно у меня не заработало. Хотя в теории должно
Редиректил через header
 
об этом кто-нибудь думал?
PHP:
array_splice($GLOBALS,14); // удаляет все глобальные переменные, назначенные юзером
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху