본문 바로가기
PHP

[PHP]debug_zvfal_dump()로 PHP 내부 동작 엿보기

by teamnova 2025. 7. 26.
728x90

안녕하세요,

오늘은 PHP의 값 복사 vs 참조 동작을 이해할 수 있는 debug_zval_dump()에 대해 알아보겠습니다. 

 

debug_zval_dump()

debug_zval_dump()는 PHP에서 변수의 내부 구조를 덤프(dump) 하면서, 해당 값이 몇 개의 변수에 의해 참조되고 있는지까지 보여주는 디버깅 함수입니다. 

보통은 우리가 $a = 'hello'; $b = $a;처럼 코드를 작성하면,
값이 그냥 복사되는 것처럼 보이지만, 실제로 PHP는 복사를 지연시키고,
참조(refcount)를 늘려서 성능을 최적화합니다.

 

이 함수는 아래 상황에 유용합니다.

 

  • 값이 복사되는 시점(= 실제 메모리 할당 시점)을 알고 싶을 때
  • 참조로 인해 값이 어디까지 연결되어 있는지 확인하고 싶을 때
  • PHP가 copy-on-write(쓰기 시 복사) 방식으로 동작함을 실험하고 싶을 때
  • 내부적으로 값이 어떻게 처리되는지 궁금할 때

 

<?php
$a = "Hello";
$b = $a;

debug_zval_dump($a);
?>

 

결과

string(5) "Hello" refcount(2)

- "Hello"라는 문자열이 현재 $a와 $b 두 변수에 의해 공유되고 있다는 의미