본문 바로가기
도서로 공부하는 프로그래밍/코딩 자율학습

변수와 메모리 주소

by 열공노년 2025. 6. 4.
반응형

변수와 메모리 주소

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>";
?>

예제 코드 실행


 

반응형