>  기사  >  백엔드 개발  >  global과 $GLOBAL['']에 대한 서로 다른 이해

global과 $GLOBAL['']에 대한 서로 다른 이해

伊谢尔伦
伊谢尔伦원래의
2017-01-16 14:55:202028검색

PHP의 전역 변수는 함수에서 사용될 때 전역으로 선언되어야 합니다(Global 키워드는 함수에서 정의된 경우에만 유용합니다).

Global은 전역 변수를 정의하는 데 사용되는데, 이 전역 변수는 웹사이트 전체에 적용되는 것이 아니라 현재 페이지(include 또는 require에 있는 모든 파일 포함)에 적용됩니다.

<?PHP 
$a=123; 
function aa() 
{ 
Global $a; 
//如果不把$a定义为global变量,函数体内是不能访问函数体外部的$a的,但是可以定义一个相同的名字$a,
//此时这个变量是局部变量,等同于C语言的局部变量,只能在函数体内部使用。 
echo $a; 
} 
aa(); 
?>

함수 몸체 내부에 정의된 전역 변수는 함수 몸체 외부에서 사용할 수 있지만, 함수 몸체 외부에서 정의된 전역 변수는 함수 몸체 내부에서 사용할 수 없습니다.

$global $a; 
$a=123; 
function f() 
{ 
echo $a; //错误, 
} 
//再看看下面一例 
function f() 
{ 
global $a; 
$a=123; 
} 
f(); 
echo $a; //正确,可以使用

비교 예:

<?php 
$var1 = 1; 
function test(){ 
unset($GLOBALS[&#39;var1&#39;]); 
} 
test(); 
echo $var1; 
?>

$var1이 삭제되었기 때문에 아무것도 인쇄되지 않았습니다.

<?php 
$var1 = 1; 
function test(){ 
global $var1; 
unset($var1); 
} 
test(); 
echo $var1; 
?>

실수로 인쇄됨 1. 이는 별칭 참조만 삭제되었으며 해당 값이 어떤 방식으로든 변경되지 않았음을 증명합니다.

global $var는 실제로 &$GLOBALS['var']이며, 이는 외부 변수를 호출하기 위한 별칭일 뿐입니다.
위 코드의 $var1과 $GLOBALS['var1']은 서로 다른 두 변수가 아닌 동일한 변수를 참조합니다.
PHP의 전역변수는 C언어와 조금 다릅니다. C 언어에서 전역 변수는 지역 변수에 포함되지 않는 한 함수에 자동으로 적용됩니다. 누군가 부주의하게 전역 변수를 변경할 수 있으므로 문제가 발생할 수 있습니다. PHP의 전역 변수는 함수에서 사용될 때 전역을 사용하여 전역으로 선언되어야 합니다.
PHP의 글로벌 변수의 기능은 글로벌 변수를 정의하는 것이지만, 이 글로벌 변수는 웹사이트 전체에 적용되는 것이 아니라 현재 페이지(include 또는 require에 있는 모든 파일 포함)에 적용됩니다.

PHP 매뉴얼에서 인용한 $GLOBALS 설명:

전역 변수: $GLOBALS, 참고: $GLOBALS는 PHP 3.0.0 이상에서 적용 가능합니다. 버전.

정의된 모든 전역 변수로 구성된 배열입니다. 변수 이름은 배열에 대한 인덱스입니다. 이는 "수퍼글로벌"이거나 자동 전역 변수로 설명될 수 있습니다.

즉, 위 코드의 $var1과 $GLOBALS['var1']은 서로 다른 2개의 변수가 아닌 동일한 변수를 참조합니다!

함수 내에서 전역으로 선언된 변수에 참조가 할당되면 해당 참조는 함수 내에서만 표시됩니다. $GLOBALS 배열을 사용하면 이 문제를 피할 수 있습니다.

우리 모두는 PHP에서 함수에 의해 생성된 변수가 함수의 전용 변수라는 것을 알고 있으므로 global 키워드에 의해 생성된 변수는 확실히 이 규칙을 벗어날 수 없습니다. global은 함수에서 외부를 가리키는 별칭을 생성합니다. 함수 외부의 실제 변수가 아닌 변수. 별칭 변수의 지정 주소가 변경되면 실제로 $GLOBALS[]는 외부 변수라고 하며 항상 일관성을 유지합니다. 함수 내부와 외부.

<?php    
$a = 1;    
$b = 2;    
function Sum()
{    
global $a, $b;    
$b = $a + $b;    
}    
Sum();    
echo $b;    
?>

출력은 "3"입니다. 전역 변수 $a 및 $b는 함수에서 선언되며 모든 변수의 모든 참조 변수는 전역 변수를 가리킵니다.

왜 2가 아닌가? 함수 밖에서는 $b가 참조로 수정되지 않지만, 수정된 $b는 물리 메모리의 값을 가리킨다는 점에 유의하자. 따라서 외부 입력은 3입니다.

그래서 함수에서 global과 $GLOBALS[]의 차이점은 다음과 같다는 결론에 도달했습니다.

global은 함수의 외부 변수를 가리키는 별칭 변수를 함수에서 생성합니다. , 실제 함수가 아님 외부 변수의 경우 별칭 변수가 가리키는 주소가 변경되면 예상치 못한 상황이 발생합니다.

$GLOBALS[]는 실제로 외부 변수라고 하며 함수 내부와 외부에서 항상 일관됩니다!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.