: 함수의 내부를 unset()하면 파괴하려는 변수의 유형에 따라 달라질 수의전역 변수의 경우 unset()과 같은 동작이 다른 작업에서도 동일하지 않은 이유는 무엇입니까? 해제() 함수에서 PHP 문서 당으로
동작. 전역 변수가 함수 내에서 unset() 인 경우 로컬 변수 만 제거됩니다. 호출 환경의 변수는 unset()이 호출되기 전과 동일한 값을 유지합니다.
말 위에서 보여주는 코드 예제은 다음과 같습니다 :
지금 내 질문은 위의 동작은 내가 작성한 프로그램을 다음에 적용 할 수없는 이유<?php
function destroy_foo()
{
global $foo;
unset($foo);
}
$foo = 'bar';
destroy_foo();
echo $foo; // o/p is bar
?>
? 행동이 unset()
기능을 위해 작성된 코드의 동작과 위의 코드에서 다른 이유
<?php
function increment_foo()
{
global $foo;
$foo++;
}
$foo = 36;
increment_foo();
echo $foo; // o/p is 37
?>
내 의심의 여지가있다?
다른 말로하면, 첫 번째 코드에서 unset()
기능이 함수 내부의 로컬 변수로 제한된다는 것을 알고 싶습니다. 함수 외부의 전역 범위에서 값을 변경하지 않지만 작성한 코드에서 변경합니다 증가 기능은 전역 변수 범위의 값도 변경합니다. 내 코드에서 왜 함수 내부의 로컬 변수와 값을 변경/함수 밖의 변수에도 영향을 미치지 않을까요?
감사합니다.
은 범위 문제 인 것 같습니다. – rtfm
그것이 작동하는 방식과 문서화 된 방법입니다. 그것과는 별도로, 그것은 나에게 꽤 논리적 인 것처럼 보입니다 : 그것은 전역 변수에 대한 참조와 같습니다. 그래서 그것을 해제하고, 참조를 해제하고 그것을 수정하여 전역 변수를 변경합니다. 진짜 질문은 전역 변수를 사용하는 이유입니다 ;-) – jeroen