열공노년 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>";
?>

예제 코드 실행


 

반응형