>  기사  >  백엔드 개발  >  PHP에서 전역 및 $GLOBALS[] 분석

PHP에서 전역 및 $GLOBALS[] 분석

巴扎黑
巴扎黑원래의
2016-11-23 09:30:36891검색

글로벌 문제
php에서 글로벌 사용. 다음 예:
$name="even";//변수 이름을 정의하고 초기화합니다.
function echoName()
{
//변수를 참조해 보세요. 함수 외부
echo "myname is ".$name."
"
echoName()
?> 위의 코드는 "myname is" 입니다. 예상했던 것과는 달리 "myname은 짝수입니다."입니다. 함수가 $name 매개변수의 값을 전달하지 않기 때문에 외부 변수를 참조하려는 시도는 성공하지 못합니다. 지금은 전역 사용을 고려해보세요.

그래서 위의 코드는 전역
function echoName()
으로 선언하면서
global $name="even";//Assign 값으로 변경되었습니다.
//함수 외부 변수 참조
echo "myname is ".$name."
"
}
echoName()?> >결과: 구문 분석 오류: 구문 오류, 예기치 않은 '=', 2행의 D:phpserverwwwtesttest.php에서 ',' 또는 ';'이 필요합니다.
즉, 위 코드에 오류가 있습니다. 그 이유는 변수를 전역으로 선언하면서 변수에 값을 할당할 수 없기 때문입니다.
위 코드를 다시 변경하세요.
global $name
$name="even";//전역 선언 및 할당 분리
function echoName()
{
//함수 외부에서 변수를 참조하려고 합니다.
echo "myname은 ".$name."
"
}
echoName()?> 🎜 > 하지만 결과는 여전히 "myname is"입니다.
글로벌의 사용법이 올바르지 않기 때문입니다. "외부 변수를 함수에 도입합니다. 변수가 매개변수를 통해 전달되지 않으면 다른 변수를 통해 도입됩니다." 즉, 함수가 외부 변수를 참조할 때 변수는 함수 내에서 전역적으로 선언될 수 있으므로 변수를 함수 내에서 사용할 수 있습니다(매개변수로 전달하는 것과 동일).

그래서 위의 코드를 더 변경했습니다:
$name="even";//변수 이름 정의 및 초기화
function echoName()
{
//global을 통해 $name을 선언하는 것은 매개변수를 전달하는 것과 같습니다.
global $name
echo "myname is ".$name."
"
}
echoName() ;
?>
이 때 예상되는 결과는 "myname is even"입니다.

위 코드는 변수의 범위를 전역으로 만드는 것이 아니라 매개 변수를 전달하는 데 전역을 사용하는 것을 보여줍니다. 다음 코드는 이를 증명합니다:
$name="even";//$name 변수를 선언하고 초기화합니다.
function echoName1()
{
//In echoName1() 함수에서 global을 사용하여 $name
global $name;
echo "첫 번째 이름은 ".$name."
"
function echoName2()입니다.
{
//Global은 echoName2() 함수에서 $name을 선언하는 데 사용되지 않습니다.
echo "두 번째 이름은 ".$name."
"
}
echoName1();
echoName2();
?>

결과는 다음과 같습니다.
첫 번째 이름은
두 번째 이름은
echoName2() 함수에서 $name 변수는 전역으로 선언되지 않았기 때문에 아직 알 수 없으므로 전달되지 않습니다. 또한 전역변수의 범위를 전역변수로 만드는 것이 전역변수의 역할이 아님을 증명합니다.

결론적으로 전역변수의 역할은 함수 외부에서 선언된 변수를 사용하려는 경우 전역변수를 선언하면 변수를 전달하는 것과 같습니다. 변수를 참조할 수 있습니다.

물론 위의 방법 외에도 전역 배열 $GLOBALS를 사용하여 문제를 해결할 수도 있습니다. 외부 변수가 필요한 경우 $GLOBALS['var']를 사용하면 됩니다. 예:
$name="even";//변수명 정의 및 초기화
function echoName()
{
//전역 배열을 통한 참조 $ GLOBALS 외부 변수
echo "myname is ".$GLOBALS['name']."
"
}
echoName()
?> 입니다: 내 이름은 짝수입니다.
또한, global 및 $GLOBALS 사용 시 대소문자 문제에 주의하세요. 대소문자가 틀리면 키워드가 작동하지 않습니다.

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