도서로 공부하는 프로그래밍/코딩 자율학습
변수와 메모리 주소
열공노년
2025. 6. 4. 11:11
반응형
변수와 메모리 주소
PHP에서 변수와 메모리 주소 개념은 C나 Java처럼 직접적으로 메모리 주소를 다루지 않지만, 내부적으로는 변수마다 메모리 공간이 할당되어 관리됩니다. 이 내용을 개념적으로 쉽게 설명드리겠습니다.
✅ 1. 변수는 '값을 담는 그릇'
$age = 70;
- $age는 이름표
- 70은 그릇 안에 담긴 값
- PHP는 이 값을 메모리 어딘가에 저장하고 $age는 그 위치를 참조합니다.
- 사용자가 직접 메모리 주소를 볼 수는 없습니다.
✅ 2. 변수는 내부적으로 '참조' 방식 사용
PHP는 기본적으로 값 복사(Value Copy) 방식이지만, 다음과 같은 경우 참조(Reference) 방식으로 처리할 수 있습니다.
🔸 참조 변수 만들기: & 사용
$a = 100;
$b = &$a; // $b는 $a의 참조
$b = 200;
echo $a; // 200 (같이 바뀜)
&$a는 “$a가 가리키는 메모리 주소를 $b도 가리킨다”는 뜻입니다.
이렇게 하면 $a와 $b는 같은 메모리 공간을 공유하게 됩니다.
✅ 3. 메모리 주소 직접 출력은 안 됨
$age = 70;
echo &$age; // ❌ 오류 발생
- PHP는 보안상 메모리 주소를 직접 노출하지 않습니다.
- 대신 참조 개념만 제공합니다.
✅ 4. debug_zval_dump()로 내부 참조 확인
$age = 70;
$ref = &$age;
debug_zval_dump($age);
🔹 출력 예시:
int(70)
refcount(2)
- refcount(2)는 이 값이 2개의 변수에서 참조되고 있다는 의미입니다.
✅ 요약
구분 설명
변수 선언 | $a = 100; 값이 메모리에 저장됨 |
참조 복사 | $b = &$a; 같은 메모리 공간 공유 |
메모리 주소 직접 출력 | ❌ 안됨 |
내부 참조 상태 확인 | debug_zval_dump() 함수 사용 |
✅ 예제 전체 코드
<?php
$a = 50;
$b = &$a;
$b = 80;
echo "a: $a<br>"; // 80
echo "b: $b<br>"; // 80
echo "<pre>";
debug_zval_dump($a);
echo "</pre>";
?>
반응형