티스토리 뷰

PHP

PHP 함수 내부에서 전역변수에 접근

블로그 강승 2021. 4. 6. 16:16

PHP 함수 내부에서
젼역변수에 접근하는 방법은 2가지이다.

 

$GLOBALS 배열 변수 이용

$dinner = '갑오징어 카레';

function macrobiotic_dinner() {
	$dinner = "모듬 채소";
    print "저녁 메뉴는 $dinner 입니다.";
    // 해산물의 유혹에 굴복하고 말았음
    print " 하지만 저는 ";
    print $GLOBALS['dinner'];
    print "를 먹겠어요. \n";
}

macrobiotic_dinner();
print "일반 저녁 메뉴: $dinner";

/* 출력 결과
저녁 메뉴는 모듬 채소입니다. 하지만 저는 갑오징어 카레를 먹겠어요.
일반 저녁 메뉴: 갑오징어 카레
$dinner = '갑오징어 카레';

function hungry_dinner() {
	$GLOBALS['dinner'] .= ' 그리고 바싹 익힌 토란';
}

print "일반 저녁 메뉴는 $dinner 입니다.";
print "\n";
hungry_dinner();
pirnt "저녁 특선 메뉴는 $dinner 입니다.";

/* 출력 결과
일반 저녁 메뉴는 갑오징어 카레 입니다.
저녁 특선 메뉴는 갑오징어 카레 그리고 바싹 익힌 토란입니다.

hungry_dinner() 함수 내부에서
일반적인 변수를 수정하듯
$GLOBALS['dinner'] 를 수정하면
전역변수 $dinner도 동시에 수정된다.

 

global 키워드

$dinner = '갑오징어 카레';

function vegetarian_dinner() {
	global $dinner;
    print "저녁 메뉴는 $dinner 였습니다만, 지금은 ";
    $dinner = '완두싹 볶음';
    print $dinner;
    print "입니다.\n";
}

print "일반 저녁 메뉴는 $dinner 입니다.";
vegetarian_dinner();
print "일반 저녁 메뉴는 $dinner 입니다.";

/* 출력 결과
일반 저녁 메뉴는 갑오징어 카레 입니다.
저녁 메뉴는 갑오징어 카레였습니다만, 지금은 완두싹 볶음입니다.
일반 저녁 메뉴는 완두싹 볶음 입니다.

첫 번째 print 구문은
전역변수 $dinner의 수정 전 값을 보여준다.

vegetarian_dinner() 함수의 global $dinner
줄은 함수 내부에서 $dinner가 사용되면
지역변수가 아닌 전역변수 $dinner를 가리키라는 의미다.

global 키워드에는 한 번에 여러 변수를 지정할 수 있다.
각 변수명을 쉼표로 구분만 하면 된다.

global $dinner, $lunch, $breakfast;

 

일반적으로 함수내부에서 전역변수를 참조할땐
$GOLBALS를 쓴다.

그 이유는 global 로 참조하면
내부 변수인지, 전역변수인지 헷갈려서
오류가 날 가능성이 높아지기 때문이다.

$GLOBALS 배열은 사용되는 위치가 함수 안이든 밖이든
관계없이 모든 영역에 존재한다.
$GLOBALS 처럼 미리 정의된 특별한 변수가 갖는 특성으로,
이런 변수들을 자동-전역(auto-global)변수라고도 한다.

자동-전역변수는 영역에 관련된 아무런 조치 없이도
PHP 프로그램 어디서든 사용할 수 있다.

댓글