Область видимости: воскресающая переменная?..

Xenos

Новичок
Область видимости: воскресающая переменная?..

В общем возникла у меня размолвка между сознанием и действительностью. Как итог: баг в скрипте.
Суть: воскресающая переменная $extasy.

PHP:
function lsd(){
	global $extasy;
	if (!isset($extasy)){
		$extasy = 'Yea!';
		echo ' ^-^ ';
	}
	unset ($extasy);
	return 'OK';
}
lsd();
echo $extasy;
lsd();
echo $extasy;
Загвоздка: я ж убиваю то переменную предпоследней строчкой функции?.. Убиваю. И вставленный isset после unset это же подтверждает.
Но выйдя из функции мы видим эту переменную в здравии и функциональности.
Хотя стоит сделать рокировку в самом начале дескать
PHP:
$a = $extasy; unset($extasy); $extasy = a;
Как больше эта переменная не воскресает. Т.е. становится корректно локальной. (что правильно, конечно. я согласен.)

Больше вопрос как убить эту глобальную, если там "сверху" у меня крутится while.
И с чем связана такая странность, что unset убивает локальную копию, а не глобальное значение?..
 

tony2001

TeaM PHPClub
global делает не копию, а ссылку (reference), в результате получается две равнозначные переменные, которые указывают на одно и то же значение.
unset($ссылка) убивает только эту ссылку, другие ссылки никак при этом не затрагиваются.
 

Ravanger

Новичок
если я не ошибаюсь.. то $extasy у тебя есть ссылка на глобальную переменную, т.е. ты ансетиш ссылку, а сама переменная остается, попробуй
PHP:
unset($_GLOBALS['extasy']);

PS. меня опередили )
 

Xenos

Новичок
Спасибо ребят. Теперь понял свой пробел. :)

PS:
PHP:
unset($GLOBALS['extasy']);
(без подчеркивания.)
 

Ravanger

Новичок
[offtopic]
Три дня с сессиями долбался, подчеркивание приросло, сорри :)
[/offtopic]
 
Сверху