> 백엔드 개발 > PHP 튜토리얼 > PHP의 전역 및 $GLOBALS[

PHP의 전역 및 $GLOBALS[

墨辰丷
풀어 주다: 2023-03-25 20:04:01
원래의
4880명이 탐색했습니다.

이 글은 주로 PHP에서 global과 $GLOBALS['']의 차이점을 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.

저는 항상 PHP에서 global과 $GLOBALS[''] 사이에 차이가 없다고 생각했습니다. 오늘 확인해 보니 둘 사이에 큰 차이가 있음을 발견했습니다.
global $var: points. 전역 변수 $var 참조;
$GLOBALS["var"]: $var와 동일한 전역 변수 $var입니다.
다음은 몇 가지 예입니다.
예 1:

<?php
    $var1 = 1;    
    $var2 = 2;    
    function test() {
        $GLOBALS[&#39;var2&#39;] = &$GLOBALS[&#39;var1&#39;];
    }
    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 = &#39;hello...&#39;;
    }
    test(); // 输出 1
    echo $var2; // 输出 2
    echo $var1; // 输出 hello...
?>
로그인 후 복사

테스트 함수에서 $var1 및 $var2는 각각 테스트에서 전역 변수 $var1 및 $var2에 대한 참조(예: 별칭)입니다. 함수(로컬 변수)는 함수의 $var1 참조로 변경됩니다
이때 테스트 함수의 $var2 값은 함수의 $var1 값과 동일하며, 또한 전역 변수의 $var1. 세 개는 동일한 메모리 공간을 가리키며, 테스트 함수의 $var2 값이 변경되면 다른 두 개의 값(테스트 함수의 $var1 및 전역 변수의 $var1) 변수)도 변경됩니다.

예제 3.

<?php
    $var1 = 1;    
    function test(){
        unset($GLOBALS[&#39;var1&#39;]);
    }
    test();    
    echo $var1;
?>
로그인 후 복사

위에서 언급했듯이 $GLOBALS['var1']은 전역 변수에서 $var1과 동일합니다. unset($GLOBALS['var1'] ); ] ); 변수 $var1이 삭제되었으므로 인쇄 내용이 비어 있습니다.

보충:
php의 unset() 함수는 변수만 삭제하는 데 사용되지만 메모리에 있는 값은 그대로 유지됩니다. 파괴되지 않음(즉, unset() 함수 인덱스는 변수와 메모리 사이의 관계를 끊고, 변수 이름을 파괴하며, 메모리에 있는 값은 파괴되지 않으며, 메모리는 해제되지 않는다는 점에 유의해야 합니다.) :
1. 이 기능은 변수가 차지하는 메모리가 256바이트를 초과하는 경우에만 작동하며 메모리가 해제됩니다.
2. 변수가 가리키는 메모리를 가리키는 모든 변수(예: 변수에 대한 모든 참조)가 소멸되는 경우에만 주소가 해제됩니다.

예제 4.

<?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的值
?>
로그인 후 복사
  1. 매개변수가 false이므로 if의 문이 실행되고 global_references( )에 포함된 var2의 값 원래 함수에 선언된 전역 변수 var2에 의해 참조되었으므로 var1의 참조가 되므로 global_references() 함수에 인쇄된 두 변수는 전역 변수 var1의 참조입니다.

  2. 1 실행된 문은 전역 변수의 값에 영향을 미치지 않으므로 프로그램 시작 부분에 선언된 값이 계속 인쇄됩니다.

  3. 매개변수가 true이므로 else의 문이 실행되어 전역 변수 var1의 값을 전역 변수 var1(global_references() 함수에 선언된 var1)의 참조로 변경합니다. () var2의 선언된 값(여전히 원래 메모리에 대한 참조)입니다.

  4. 3 이후에는 전역 변수 var2가 전역 변수 var1에 대한 참조가 되었기 때문에 이때 두 전역 변수의 값은 동일합니다.

요약:

global $var: 전역 변수 $var에 대한 참조입니다.
$GLOBALS["var"]: 전역 변수 $var 자체입니다.
전자는 다음과 같습니다. 함수 내부 선언된 변수의 범위는 함수입니다. 즉, 함수 내에서만 볼 수 있습니다. 이 변수는 전역 변수를 가리키는 참조이므로 변수가 가리키는 전역 변수에는 영향을 미치지 않습니다.

관련 권장 사항:


PHP는 외부 변수 $GLOBALS

읽기 PHP json_encode($GLOBALS) 오류

const 및 global in php

위 내용은 PHP의 전역 및 $GLOBALS[의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿