변수처리 debug_zval_dump

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

debug_zval_dump — 출력할 내부 zval 구조의 문자열 표현을 덤프합니다.


설명

debug_zval_dump(mixed $value, mixed ...$values): void

출력할 내부 zval(Zend 값) 구조의 문자열 표현을 덤프합니다. 이것은 Zend Engine 또는 PHP 확장의 구현 세부 사항을 이해하거나 디버깅하는 데 주로 유용합니다.


매개변수

value
덤프할 변수 또는 값입니다.
values
덤프할 추가 변수 또는 값입니다.

반환 값

값이 반환되지 않습니다.


Examples

예제 #1 debug_zval_dump() 예제

                  
<?php
$var1 = 'Hello';
$var1 .= ' World';
$var2 = $var1;

debug_zval_dump($var1);
?>
                  
                

위의 예는 다음을 출력합니다.

string(11) "Hello World" refcount(3)
                
참고: 참조 횟수 이해하기

이 함수에 의해 표시되는 refcount 값은 엔진 구현에 대한 자세한 이해 없이는 놀랄 수 있습니다.

Zend Engine은 두 가지 다른 목적으로 참조 카운팅을 사용합니다.

  • 동일한 값을 보유하는 여러 변수가 메모리의 동일한 사본을 가리키는 "기록 시 복사"라는 기술을 사용하여 메모리 사용을 최적화합니다. 변수 중 하나가 수정되면 메모리의 새 복사본을 가리키고 원본의 참조 횟수는 1만큼 감소합니다.
  • 참조에 의해 할당되거나 전달된 추적 변수(참조 설명 참조). 이 refcount는 현재 값의 zval을 가리키는 별도의 참조 zval에 저장됩니다. 이 추가 zval은 현재 debug_zval_dump()에 의해 표시되지 않습니다.

debug_zval_dump()는 값으로 전달되는 일반 매개변수로 입력을 받기 때문에 copy on write 기술을 사용하여 전달합니다. 데이터를 복사하는 대신 함수 호출의 수명 동안 refcount가 하나씩 증가합니다. 함수가 매개변수를 받은 후 수정한 경우 복사본이 만들어집니다. 그렇지 않기 때문에 호출 범위보다 하나 더 높은 refcount를 표시합니다.

매개변수 전달은 참조에 의해 할당된 변수를 표시하는 debug_zval_dump()도 방지합니다. 설명을 위해 위의 예를 약간 수정한 버전을 고려하십시오.

                    
  <?php
  $var1 = 'Hello';
  $var1 .= ' World';
  // Point three variables as references to the same value
  $var2 =& $var1;
  $var3 =& $var1;

  debug_zval_dump($var1);
  ?>
                    
                  

위의 예는 다음을 출력합니다.

string(11) "Hello World" refcount(2)
                  

$var1, $var2, $var3은 참조로 연결되어 있지만 debug_zval_dump()에는 값만 전달됩니다. 이 값은 참조 세트에 의해 한 번 사용되고 debug_zval_dump() 내부에서 한 번 사용되므로 refcount 2를 표시합니다.

다른 데이터 유형에 대한 엔진 최적화로 인해 더 복잡한 문제가 발생합니다. 정수와 같은 일부 유형은 "기록 시 복사"를 사용하지 않으므로 참조 수를 전혀 표시하지 마십시오. 다른 경우에 refcount는 리터럴 문자열이나 배열이 코드 명령어의 일부로 저장되는 경우와 같이 내부적으로 사용된 추가 복사본을 보여줍니다.


기타