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['var1']); } 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[]는 실제로 외부 변수라고 하며 함수 내부와 외부에서 항상 일관됩니다!