이 글은 주로 PHP에서 global과 $GLOBALS['']의 차이점을 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.
저는 항상 PHP에서 global과 $GLOBALS[''] 사이에 차이가 없다고 생각했습니다. 오늘 확인해 보니 둘 사이에 큰 차이가 있음을 발견했습니다.
global $var: points. 전역 변수 $var 참조;
$GLOBALS["var"]: $var와 동일한 전역 변수 $var입니다.
다음은 몇 가지 예입니다.
예 1:
<?php $var1 = 1; $var2 = 2; function test() { $GLOBALS['var2'] = &$GLOBALS['var1']; } test(); echo $var2;//输出1 ?>
test() function $GLOBALS[' var2']는 전역 변수 $var1과 동일합니다.
$GLOBALS['var2'] = $GLOBALS['var1'] 이 함수는 $var2를 $var1에 대한 참조로 변경하는 것입니다. $var2는 $var1의 별칭이며 둘 다 동일한 메모리 공간을 가리키므로 $var2의 값은 1이 됩니다.
예 2:
<?php $var1 = 1; $var2 = 2; function test(){ global $var1, $var2; $var2 = &$var1; echo $var2; $var2 = 'hello...'; } test(); // 输出 1 echo $var2; // 输出 2 echo $var1; // 输出 hello... ?>
테스트 함수에서 $var1 및 $var2는 각각 테스트에서 전역 변수 $var1 및 $var2에 대한 참조(예: 별칭)입니다. 함수(로컬 변수)는 함수의 $var1 참조로 변경됩니다
이때 테스트 함수의 $var2 값은 함수의 $var1 값과 동일하며, 또한 전역 변수의 $var1. 세 개는 동일한 메모리 공간을 가리키며, 테스트 함수의 $var2 값이 변경되면 다른 두 개의 값(테스트 함수의 $var1 및 전역 변수의 $var1) 변수)도 변경됩니다.
<?php $var1 = 1; function test(){ unset($GLOBALS['var1']); } test(); echo $var1; ?>위에서 언급했듯이 $GLOBALS['var1']은 전역 변수에서 $var1과 동일합니다. unset($GLOBALS['var1'] ); ] ); 변수 $var1이 삭제되었으므로 인쇄 내용이 비어 있습니다.
보충:
php의 unset() 함수는 변수만 삭제하는 데 사용되지만 메모리에 있는 값은 그대로 유지됩니다. 파괴되지 않음(즉, unset() 함수 인덱스는 변수와 메모리 사이의 관계를 끊고, 변수 이름을 파괴하며, 메모리에 있는 값은 파괴되지 않으며, 메모리는 해제되지 않는다는 점에 유의해야 합니다.) :
1. 이 기능은 변수가 차지하는 메모리가 256바이트를 초과하는 경우에만 작동하며 메모리가 해제됩니다.
2. 변수가 가리키는 메모리를 가리키는 모든 변수(예: 변수에 대한 모든 참조)가 소멸되는 경우에만 주소가 해제됩니다.
<?php $var1 = 1; function test(){ global $var1; unset($var1); } test(); echo $var1; //结果为打印1 ?>이 코드에서 test() 함수에서 global을 사용하여 정의된 변수는 실제로 전역 변수 $var에 대한 참조일 뿐입니다. test() 함수에서 변수를 삭제하는 것은 전역 변수를 삭제하는 것과 같습니다. 변수(두 개의 이름을 가진 메모리 조각으로, 이름 중 하나를 삭제해도 다른 이름과 메모리 값에 영향을 미치지 않습니다.) 따라서 전역 변수 $var를 인쇄할 때 결과는 여전히 1 입니다. 이 코드는 다음 코드와 유사합니다.
<?php $var = 1; $var1 = &$var; unset($var1); echo $var; ?>함수 내에서 전역 변수를 참조하는 또 다른 예를 살펴보세요.
<?php $var1 = "我是变量var1的值"; $var2 = "我是变量var2的值"; function global_references($use_globals) { global $var1, $var2; if (!$use_globals) { $var2 = &$var1; echo $var1; echo $var2; echo "<br />"; } else { $GLOBALS["var2"] = &$var1; echo $var1; echo $var2; echo "<br />"; } } global_references(false); //1.打印:我是变量var1的值我是变量var1的值 echo $var1; echo $var2; echo "<br />"; //2.打印:我是变量var1的值我是变量var2的值 global_references(true); //3.打印:我是变量var1的值我是变量var2的值 echo $var1; echo $var2; echo "<br />"; //4.打印:我是变量var1的值我是变量var1的值 ?>
global $var: 전역 변수 $var에 대한 참조입니다.
$GLOBALS["var"]: 전역 변수 $var 자체입니다.
전자는 다음과 같습니다. 함수 내부 선언된 변수의 범위는 함수입니다. 즉, 함수 내에서만 볼 수 있습니다. 이 변수는 전역 변수를 가리키는 참조이므로 변수가 가리키는 전역 변수에는 영향을 미치지 않습니다.
읽기 PHP json_encode($GLOBALS) 오류
위 내용은 PHP의 전역 및 $GLOBALS[의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!