2014-12-13 2 views
0

변수 자체를 손상시키지 않고 PHP에서 변수에 대한 참조를 어떻게 끊습니까?참조를 깨는 방법

나는 객체에 대한 참조를 $GLOBALS['parent_variables']에 저장하고 그 함수의 끝에서 그것을 파괴하는 PHP 루프를 작성했다.

함수가 루프에서 호출됩니다. 나는 내가 사용한다고 가정한다 :

unset($GLOBALS['parent_variables']) 

그것은 참조를 파괴 하는가? 사용

$GLOBALS['parent_variables'] = &$question->variables; 

:

$GLOBALS['parent_variables'] = &$question->variables; 
+2

당신이 reference''무엇을 의미합니까? – Rizier123

+0

안녕하세요, 다음 예가 있습니다 : $ GLOBALS [ 'parent_variables'] = & $ question-> variables; $ GLOBALS [ 'parent_variables'] – user3072613

+0

에서 참조를 비우는 방법'$ GLOBALS [ 'parent_variables']'가 여전히 설정되기를 원하지만 비어 있거나'$ GLOBALS [ 'parent_variables']를 해제 하시겠습니까? '? – Rizier123

답변

0

후 : 그냥 ...

을 확인하기 위해이 같은 기준을 설정

unset($GLOBALS['parent_variables']) 

이 ... 참조를 중단합니다 - - $parent_variables 집합과 마찬가지로 $question->variables을 유지하면서 null로 설정합니다.

사용 :

$GLOBALS['parent_variables'] = null 

이 ... null로 변수를 모두 설정합니다.

예 : 배열에서

$foo = 'bar'; 

$GLOBALS['baz'] = &$foo; 
unset($GLOBALS['baz']); 
var_dump($GLOBALS['baz'], $foo); # null, bar; undefined index notice for baz 

$GLOBALS['baz'] = &$foo; 
$GLOBALS['baz'] = null; 
var_dump($GLOBALS['baz'], $foo); # null, null; no notice (since baz is set) 
0

반환하기 만 '참조'를 제거 않으며, 당신이에서 복사 한 객체를 변경하지 않습니다. 예 :

<?php 

$foo = new StdClass(); 
$foo->bar = "hello"; 
$_FAKE_GLOBAL_ARRAY = array(); 
$_FAKE_GLOBAL_ARRAY['foo'] = $foo->bar; 
echo "array references ".$_FAKE_GLOBAL_ARRAY['foo']; 
echo "<br>object contains ".$foo->bar; 
unset($_FAKE_GLOBAL_ARRAY['foo']); 
echo "<br>now array references ".(isset($_FAKE_GLOBAL_ARRAY['foo']) ? $_FAKE_GLOBAL_ARRAY['foo'] : " nothing"); 
echo "<br>now object contains ".$foo->bar; 
?> 

출력

array references hello 
object contains hello 
now array references nothing 
now object contains hello