>백엔드 개발 >PHP 튜토리얼 >PHP 변수 범위 사용법 요약

PHP 변수 범위 사용법 요약

WBOY
WBOY원래의
2016-07-25 08:59:111248검색
  1. function function_name() {
  2. global $var;
  3. }
  4. $var=20;
  5. function_name (); // 함수 호출.
  6. ?>
코드 복사

이 예에서 함수 내부의 $var는 이제 함수와 동일 외부 $var와 동일. 즉, $var 변수에는 이미 20이라는 값이 있고, 이 값이 함수 내부에서 변경되면 외부의 $var 값도 변경된다는 의미입니다. 변수 범위를 피하는 또 다른 방법은 슈퍼전역 변수($_GET, $_POST, $_REQUEST 등)를 사용하는 것입니다. 이러한 변수는 함수 내에서 자동으로 액세스할 수 있습니다(따라서 슈퍼전역 변수입니다). 함수 내에서 사용할 수 있도록 $GLOBALS 배열에 요소를 추가할 수도 있습니다.

함수 내에서는 전역 변수를 사용하지 않는 것이 가장 좋습니다. 함수를 설계할 때 필요에 따라 모든 값을 매개변수로 받아들이고 필요에 따라 값을 반환하도록 해야 합니다. 함수 내에서 전역 변수에 의존하면 함수가 상황에 더 의존하게 되어 유용성이 떨어집니다.

PHP의 변수에는 주로 내장된 슈퍼 전역 변수, 일반 변수, 상수, 전역 변수, 정적 변수 등이 포함됩니다.

내장된 슈퍼 전역 변수는 스크립트의 어느 곳에서나 사용하고 볼 수 있습니다. 즉, PHP 페이지의 값 중 하나를 변경하면 다른 PHP 페이지에서 사용될 때 해당 값도 변경됩니다.

일단 선언되면 상수는 전역적으로 표시됩니다. 즉, 함수 내부 및 외부에서 사용할 수 있지만 이는 한 페이지에 포함된 PHP 스크립트(include 및 include_once를 통해 포함하는 PHP 스크립트 포함)로만 제한됩니다. 다른 페이지에서는 더 이상 사용할 수 없습니다.

스크립트에 선언된 전역 변수는 스크립트 전체에서 볼 수 있지만 함수 내부에서는 볼 수 없습니다. 함수 내부 변수의 이름이 전역 변수와 동일한 경우 함수 내부 변수가 우선합니다.

함수 내부에서 사용되는 변수를 전역 변수로 선언할 때 그 이름은 전역 변수의 이름과 일치해야 합니다. 이 경우 함수 외부에서 전역 변수를 사용할 수 있으므로 함수 내부의 변수 이름이 외부 전역 변수와 동일하기 때문에 외부 변수를 덮어쓰는 상황을 피할 수 있습니다.

함수 내부에서 정적으로 생성되고 선언된 변수는 함수 외부에서 볼 수 없지만 함수를 여러 번 실행하는 동안 값이 유지될 수 있습니다. 가장 일반적인 상황은 함수를 재귀적으로 실행하는 동안입니다.

함수 내부에 생성된 변수는 함수에 대해 로컬이며 함수가 종료되면 더 이상 존재하지 않습니다.

슈퍼 전역 변수의 전체 목록은 다음과 같습니다.

  1. $a = 4;
  2. function sendValue($x)
  3. {
  4. echo $x;
  5. }
  6. sendValue($a);
  7. ?>
코드 복사

설명: $a는 외부에서 정의됩니다. function 에서는 함수가 매개변수를 정의하고, 함수가 호출되면 $a 가 매개변수 형태로 전달됩니다. 따라서 위의 코드는 정상적으로 실행될 수 있습니다.

  1. $a = 4;
  2. function sendValue()
  3. {
  4. echo $a;
  5. }
  6. sendValue();
  7. ?>
코드 복사

설명: 함수가 호출되면 $a는 매개변수는 양식으로 전달됩니다. 따라서 위의 코드는 정상적으로 실행될 수 없습니다. 가변 범위 변수의 범위는 변수가 정의된 컨텍스트입니다(번역자: 직설적으로 말하면 유효 범위). 대부분의 PHP 변수에는 단일 범위만 있습니다. 이 단일 범위 범위에는 include 및 require에 의해 도입된 파일도 포함됩니다. 예:

  1. $a = 1;
  2. include "b.inc";
  3. ?>
코드 복사

여기서 $a 변수는 포함된 파일 b.inc에 적용됩니다. 그러나 사용자 정의 함수에는 로컬 함수 범위가 도입됩니다. 함수 내에서 사용되는 모든 변수는 기본적으로 로컬 함수 범위로 제한됩니다. 예:

  1. $a = 1; /* 전역 범위 */

  2. function Test()

  3. {
  4. echo $a /* 로컬 범위 변수에 대한 참조 */
  5. }

  6. Test();

  7. ?>
코드 복사

echo 문이 변수 $a의 로컬 버전을 참조하고 이 범위 내의 값이 할당되지 않았기 때문에 이 스크립트는 출력을 생성하지 않습니다. PHP의 전역 변수는 C와 약간 다르다는 것을 알 수 있습니다. C에서 전역 변수는 지역 변수에 의해 재정의되지 않는 한 자동으로 함수에 적용됩니다. 누군가가 부주의하게 전역 변수를 변경할 수 있으므로 문제가 발생할 수 있습니다. PHP의 전역 변수는 함수에서 사용될 때 전역으로 선언되어야 합니다.

글로벌 키워드 먼저 전역 사용 예:

예제 12-1. 글로벌 사용

  1. $a = 1;
  2. $b = 2;

  3. 함수 Sum()

  4. {
  5. 전역 $a, $b;

  6. $b = $a $b;

  7. }< ;/p>
  8. Sum();

  9. echo $b;
  10. ?>
코드 복사

위 스크립트의 출력은 "3"이 됩니다. 전역 변수 $a 및 $b는 함수에서 선언되며 모든 변수의 모든 참조 변수는 전역 변수를 가리킵니다. PHP는 함수가 선언할 수 있는 전역 변수의 최대 개수에 제한이 없습니다.

전역 범위의 변수에 액세스하는 두 번째 방법은 특별한 PHP 사용자 정의 $GLOBALS 배열을 사용하는 것입니다. 이전 예는 다음과 같이 작성할 수 있습니다.

예제 12-2. global 대신 $GLOBALS 사용

  1. $a = 1;
  2. $b = 2;

  3. 함수 Sum()

  4. {
  5. $GLOBALS["b"] = $GLOBALS["a"] $GLOBALS["b"];
  6. }

  7. Sum();

  8. echo $b;
  9. ?>
코드 복사

$GLOBALS 배열에서 각 변수는 요소이고 키 이름은 변수 이름에 해당하며 값은 변수 내용에 해당합니다. $GLOBALS는 슈퍼전역 변수이기 때문에 $GLOBALS는 전역 범위에 존재합니다. 다음 예에서는 슈퍼전역 변수의 사용을 보여줍니다.

예제 12-3. 슈퍼전역 변수와 범위를 보여주는 예

  1. function test_global()
  2. {
  3. // 대부분의 사전 정의된 변수는 그렇지 않습니다. "super"인 경우 함수의 로컬 범위에서 사용할 수 있도록 하려면 'global' 키워드가 필요합니다.
  4. global $HTTP_POST_VARS;

  5. print $HTTP_POST_VARS['name'];

  6. // 슈퍼전역은 모든 범위에서 유효합니다. '전역' 선언이 필요하지 않습니다. 슈퍼글로벌은 PHP 4.1.0에서 도입되었습니다.

  7. $_POST['name'] 인쇄;
  8. }
  9. ?>
코드 복사

정적 변수 사용 변수 범위의 또 다른 중요한 기능은 정적 변수입니다. 정적 변수는 로컬 함수 범위에만 존재하지만 프로그램 실행이 이 범위를 벗어나도 해당 값은 손실되지 않습니다. 아래 예를 살펴보세요.

예제 12-4는 정적 변수의 필요성을 보여줍니다.

  1. 함수 테스트()
  2. {
  3. $a = 0;
  4. echo $a;
  5. $a ;
  6. }
  7. ?>
코드 복사

$는 매번 변경되므로 이 기능은 쓸모가 없습니다. a의 값을 0으로 설정하고 "0"을 출력한다고 합니다. 함수가 종료되면 변수 $a가 더 이상 존재하지 않기 때문에 변수 $a를 1씩 늘려도 아무런 효과가 없습니다. 현재 카운트 값을 잃지 않는 카운팅 함수를 작성하려면 $a 변수를 static으로 정의하세요.

예제 12-5. 정적 변수 사용 예

  1. function Test()
  2. {
  3. static $a = 0;
  4. echo $a;
  5. $a ;
  6. }
  7. ?>
코드 복사

이제 Test() 함수가 호출될 때마다, $는 a의 값을 출력하고 1을 더합니다. 1 2 다음 페이지 마지막 페이지



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