PHP는 스크립트용 해석 언어로, 약한 변수의 특성과 실행 후 리소스를 해제하는 기능이 있습니다. PHP7의 강력한 추가로 백엔드 언어에 강력한 돌풍이 불었습니다. 글쎄요, 제가 평소에 변수의 범위에 별로 관심을 두지 않았기 때문에 이 글을 쓰는 것은 스스로를 상기시키는 일이라고 볼 수 있습니다. HP는 스크립팅 해석 언어로서 약한 변수의 특성과 실행 후 리소스를 해제하는 특성을 가지고 있습니다. PHP7의 강력한 추가는 백엔드 언어에 강력한 소용돌이를 일으켰습니다. 글쎄요, 제가 평소에 변수의 범위에 별로 관심을 두지 않았기 때문에 이 글을 쓰는 것은 스스로를 상기시키는 일이라고 볼 수 있습니다.
PHP의 문법적 특징도 C++와 유사합니다. 게다가 $_POST, $FILE과 같은 전역 변수와 constructor(), destruct()와 같은 매직 변수를 사용하면 개발이 더 편리해집니다.
하지만 일부 사람들은 PHP의 변수 범위에 익숙하지 않습니다. PHP에서는 함수 변수와 전역 세계가 완전히 분리되어 있어 서로 액세스할 수 없습니다.
<?php $test = 'hello,world'; abc(); //这里什么都不输出,因为访问不到$test变量 function abc(){ echo($test); }?>
global 및 $GLOBALS[]
global 키워드를 사용하여 변수를 선언할 수 있습니다. 위의 예는 다음과 같습니다.
$test = 'hello,world'; abc(); function abc(){ global $test; echo $test; }
전역 범위의 변수에 액세스하는 두 번째 방법은 다음과 같이 $GLOBALS 배열을 사용자 정의하는 것입니다. 특별한 PHP. 이전 예는 다음과 같이 작성할 수 있습니다.
$test = 'hello,world'; function abc(){ echo $GLOBALS['test']; } abc();
저는 원래 global과 $GLOBALS가 작성 방법이 다르다는 점을 제외하고는 동일한 것으로 생각했습니다. 그러나 실제 응용에서는 둘 사이의 차이가 여전히 매우 크다는 것을 확인했습니다. 이 예:
function test1() { global $v1, $v2; $v2 =& $v1; } function test2() { $GLOBALS['v3'] =& $GLOBALS['v1']; } $v1 = 1; $v2 = $v3 = 0; test1(); echo $v2 ."\n"; test2(); echo $v3 ."\n";
이유는 다음과 같습니다.
결과는
이어야 하지 않나요? 예제를 보고 있습니다
function test() { global $a; unset($a); } $a = 1; test(); echo $a;
결과
가 분명히 설정되지 않은데 왜 여전히 인쇄되어 있나요?
우리 모두 알고 있듯이 우리 함수는 항상 개인 변수입니다. Unset은 전역 값을 설정 해제하고 전역은 함수의 실제 외부 변수가 아닌 함수의 외부 변수를 가리키는 별칭 변수를 생성합니다. ;$GLOBALS[]는 실제로 외부 변수라고 하며 함수 내부와 외부에서 항상 일관됩니다!
use()
use() 또는
namespace 사용을 이해하시나요? PHP 네임스페이스는 별칭 또는 가져오기를 사용하는 두 가지 방법을 지원합니다. 즉, 클래스 이름에 별칭을 사용하거나 네임스페이스 이름에 별칭을 사용하는 것입니다. operator사용. 하지만 오늘 우리가 이야기할 것은 다음과 같은 형식입니다: function use(){}php5.3 관련글 : 위 내용은 PHP 변수 범위 및 전역 변수(그래픽 튜토리얼)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
New
클로저 구문,//普通
$a="hello,world!";$test = function () use($a){
echo $a;
};
$test();//引用
对象
$ob=(object)array('name' => 'gbw');$test2 = function () use($ob){
var_dump($ob);
};$test2();