본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP global 키워드 — 함수 안에서 전역변수 공유 완전 정리

by 왕진 2026. 6. 14.
반응형

 

 

Web Development · PHP global keyword

PHP global 키워드 —
함수 안에서 바깥 변수에 접근하기

$data를 함수 안과 바깥에서 공유 → 함수 호출이 원본 값을 직접 변경
시작 오늘 분석할 코드

앞서 본 global1.php와 거의 똑같지만 한 줄이 다르다 — 함수 첫 줄에 global $data;가 있다. 그 한 줄로 함수 안의 $data바깥의 그것과 같은 변수가 된다.

<?php // 전역 변수 $data = 5; function scope_test(){ global $data; // 전역 변수를 참조 $data += 1; print $data; print "<BR>"; } print $data; print "<BR>"; scope_test(); print $data; print "<BR>"; ?>
실제 출력 결과
5
6
6

마지막에도 6이 나온다. 함수 안에서 +1 한 게 바깥 $data에 그대로 영향을 준 것.

용어 용어 정리
global함수 안에서 같은 이름의 전역 변수를 끌어오는 키워드
전역 변수 공유global 선언 시 안과 밖이 같은 메모리 주소
+=$x = $x + 값을 짧게 쓰는 복합 연산자
$data전역 5에서 함수 호출 후 6으로 변경
사이드 이펙트함수가 외부 상태를 변경하는 효과
참조 (reference)같은 메모리 칸을 가리키는 별칭
global 위치함수 본문 첫 줄에 적는 게 관례
vs $GLOBALSglobal 키워드와 다른 또 하나의 방법 (global3 참고)

1 global이 없으면? — global1과의 차이
global1 (global 없음)
함수 안 $data는 새 지역 변수
바깥 $data와 무관
결과: 5 / 1 / 5
global2 (이 코드)
함수 안 $data = 바깥 $data
같은 메모리 칸을 공유
결과: 5 / 6 / 6
global $data; 한 줄을 더하면 함수가 바깥 변수를 진짜로 변경할 수 있게 된다.

2 global 키워드의 의미
function scope_test() { global $data; // ↑ ↑ // 키워드 "이 함수에서 $data는 전역의 그것과 같은 변수다" }

global"이 변수는 새로 만들지 말고, 바깥의 같은 이름 변수를 그대로 가져와 쓰라"는 선언이다.

함수 안 작업 global 없을 때 global 있을 때
$data = 100; 지역 $data 새로 만듦 전역 $data를 100으로 변경
print $data; 지역 $data (정의 안 됐으면 경고) 전역 $data 출력
$data += 1; 지역 $data 1로 (null+1) 전역 $data 1 증가
함수 종료 후 지역 $data 소멸 전역 $data는 변경된 채로 남음

3 += 복합 대입 연산자
$data += 1; // 같다 → $data = $data + 1;
연산자 의미 풀어 쓰면
+= 더해서 자기에 대입 $x = $x + n
-= 빼서 대입 $x = $x - n
*= 곱해서 대입 $x = $x * n
/= 나눠서 대입 $x = $x / n
.= 문자열 결합 후 대입 $s = $s . "추가"
++ 1 증가 $x = $x + 1

 

반응형

 

4 실행 흐름 단계별 추적
1
$data = 5전역에 $data = 5
2
함수 정의실행은 아직 안 함
3
print $data; → 5 출력
4
scope_test() 호출함수 진입
5
global $data;함수 안 $data ↔ 바깥 $data 같은 변수로 연결
6
$data += 1; → 5 + 1 = 6전역 $data가 6으로 변경됨
7
print $data; → 6 출력
8
함수 종료전역 $data는 6 그대로 유지
9
print $data; → 6 출력함수가 변경한 값이 그대로 보임

5 여러 변수를 한꺼번에
function f() { global $a, $b, $c; // 콤마로 여러 변수 $a += $b + $c; }
또는 줄바꿈해서 명시적으로:
global $a;
global $b;
global $c;

6 global의 단점 — 왜 권장되지 않는가
global은 PHP에서 가능하지만 권장되지 않는 패턴이다. 가능한 한 매개변수와 반환값으로 처리하는 게 좋다.
※ global 사용의 단점
  • 함수가 외부 상태에 의존 → 테스트 어려움
  • 같은 이름 전역 변수가 여기저기서 변경 → 디버깅 지옥
  • 함수 시그니처(매개변수 목록)만 보고는 영향 범위를 알 수 없음
  • 대규모 프로젝트에서 변수 충돌 사고 빈발
  • 객체지향 코드에서는 클래스 속성으로 대체

7 권장 대안 — 매개변수 + return
global 사용 (이 코드)
$data = 5;
function f() {
  global $data;
  $data += 1;
}
f();
print $data; // 6
매개변수 + return
$data = 5;
function f($x) {
  return $x + 1;
}
$data = f($data);
print $data; // 6

같은 결과지만 두 번째 방식은 "함수가 무엇을 받아 무엇을 내는지"가 함수 시그니처에 모두 드러난다. 외부 변수에 함수 내부에서 접근하지 않으므로 사이드 이펙트도 없다.


8 자주 하는 실수
실수 증상 해결
global $data; 빼먹음 함수가 새 지역 변수 만듦 전역 접근 시 반드시 global 선언
global을 함수 외부에 적음 의미 없음 (오류는 아님) 함수 본문 안에 적기
전역 변수 이름 충돌 다른 곳의 같은 이름이 덮임 이름 prefix 또는 클래스 속성 사용
여러 함수에서 global 남발 코드 흐름 추적 어려움 의존성 주입(매개변수)로 리팩토링
+=의 좌·우 헷갈림 의도와 다른 결과 $x += 1$x = $x+1

핵심 한 줄 요약

global $x;함수 안에서 같은 이름의 전역 변수를 끌어오기
효과함수 안 $x ↔ 바깥 $x 같은 메모리 칸 공유
출력 5/6/6함수의 +1이 바깥에 그대로 영향
+=자기 자신에 더해서 다시 대입하는 복합 연산자
한꺼번에global $a, $b, $c; 식으로 여러 개 가능
단점사이드 이펙트, 디버깅 어려움 → 가능하면 회피
권장매개변수로 받고 return으로 돌려주기
반응형

댓글