>  기사  >  백엔드 개발  >  PHP의 debug_zval_dump 및 xdebug_debug_zval 정보

PHP의 debug_zval_dump 및 xdebug_debug_zval 정보

WBOY
WBOY원래의
2016-10-23 00:12:55965검색

마스터 여러분, debug_zval_dumpxdebug_debug_zval에서 얻은 refcount가 왜 다른지 여쭤보고 싶습니다.
예:

<code>   $var = "laruence"; 
   $var_1 = &$var;
   $var_2 = &$var;
   
   $var1 = $var;
   $var2 = $var;
   $var3 = $var;
   $var4 = $var;
   
   //debug_zval_dump得到的refcount等于1
   
   //xdebug_debug_zval得到的refcount等于3
</code>

refcount가 이 zval 컨테이너를 가리키는 변수 이름의 수를 나타낸다는 내용을 온라인에서 읽었지만 여전히 결과가 일관되지 않는 이유를 모르겠습니다. 이 기능에 대한 자세한 소개를 찾지 못했습니다. . .

그러나 나는 다음과 같은 규칙을 세웠습니다.


xdebug_debug_zval 정보:

  • 변수 참조가 있는 경우 xdebug_debug_zval을 사용하여 얻은 결과는 다음과 같습니다. is_ref=1;refcount=변수 참조 수(변수 자체 계산)

예를 들어

<code>   $var = "laruence";    //第1次
   $var_1 = &$var;       //第2次

   $var1 = $var;
   $var2 = $var;
   $var3 = $var;
   $var4 = $var;
</code>

따라서 xdebug_debug_zval에서 is_red=1;refcount=2;를 얻을 수 있습니다.

  • 변수가 참조되지 않은 경우 xdebug_debug_zval을 사용하여 얻은 결과는 다음과 같습니다. is_ref=0;refcount=복사된 변수 수(변수 자체 계산)

예를 들어

<code>   $var = "laruence";     //第1次

   $var1 = $var;          //第2次
   $var2 = $var;          //第3次
   $var3 = $var;          //第4次
   $var4 = $var;          //第5次
</code>

따라서 xdebug_debug_zval에서 is_red=0;refcount=5;를 얻을 수 있습니다.

debug_zval_dump 정보:

  • 변수 참조가 있는 경우 debug_zval_dump 사용 결과는 다음과 같습니다. refcount=1(항상 = 1)

예를 들어

<code>   $var = "laruence";    
   $var_1 = &$var;       

   $var1 = $var;
   $var2 = $var;
   $var3 = $var;
   $var4 = $var;
</code>

그래서 debug_zval_dump에서 다음을 얻을 수 있습니다: refcount=1

  • 변수가 참조되지 않는 경우 debug_zval_dump를 사용하여 얻은 결과는 다음과 같습니다. refcount = 변수 복사본 수(변수 자체 계산) + 1

예를 들어

<code>   $var = "laruence";    //第1次

   $var1 = $var;          //第2次
   $var2 = $var;          //第3次
   $var3 = $var;          //第4次
   $var4 = $var;          //第5次
</code>

따라서 xdebug_debug_zval에서 is_red=0;refcount=6;을 얻을 수 있습니다.

답글 내용:

마스터 여러분, debug_zval_dumpxdebug_debug_zval에서 얻은 refcount가 왜 다른지 여쭤보고 싶습니다.
예:

<code>   $var = "laruence"; 
   $var_1 = &$var;
   $var_2 = &$var;
   
   $var1 = $var;
   $var2 = $var;
   $var3 = $var;
   $var4 = $var;
   
   //debug_zval_dump得到的refcount等于1
   
   //xdebug_debug_zval得到的refcount等于3
</code>

refcount가 이 zval 컨테이너를 가리키는 변수 이름의 수를 나타낸다는 내용을 온라인에서 읽었지만 여전히 결과가 일관되지 않는 이유를 모르겠습니다. 이 기능에 대한 자세한 소개를 찾지 못했습니다. . .

그러나 나는 다음과 같은 규칙을 세웠습니다.


xdebug_debug_zval 정보:

  • 변수 참조가 있는 경우 xdebug_debug_zval을 사용하여 얻은 결과는 다음과 같습니다. is_ref=1;refcount=변수 참조 수(변수 자체 계산)

예를 들어

<code>   $var = "laruence";    //第1次
   $var_1 = &$var;       //第2次

   $var1 = $var;
   $var2 = $var;
   $var3 = $var;
   $var4 = $var;
</code>

따라서 xdebug_debug_zval에서 is_red=1;refcount=2;를 얻을 수 있습니다.

  • 변수가 참조되지 않은 경우 xdebug_debug_zval을 사용하여 얻은 결과는 다음과 같습니다. is_ref=0;refcount=복사된 변수 수(변수 자체 계산)

예를 들어

<code>   $var = "laruence";     //第1次

   $var1 = $var;          //第2次
   $var2 = $var;          //第3次
   $var3 = $var;          //第4次
   $var4 = $var;          //第5次
</code>

따라서 xdebug_debug_zval에서 is_red=0;refcount=5;를 얻을 수 있습니다.

debug_zval_dump 정보:

  • 변수 참조가 있는 경우 debug_zval_dump 사용 결과는 다음과 같습니다. refcount=1(항상 = 1)

예를 들어

<code>   $var = "laruence";    
   $var_1 = &$var;       

   $var1 = $var;
   $var2 = $var;
   $var3 = $var;
   $var4 = $var;
</code>

그래서 debug_zval_dump에서 다음을 얻을 수 있습니다: refcount=1

  • 변수가 참조되지 않는 경우 debug_zval_dump를 사용하여 얻은 결과는 다음과 같습니다. refcount = 변수 복사본 수(변수 자체 계산) + 1

예를 들어

<code>   $var = "laruence";    //第1次

   $var1 = $var;          //第2次
   $var2 = $var;          //第3次
   $var3 = $var;          //第4次
   $var4 = $var;          //第5次
</code>

따라서 xdebug_debug_zval에서 is_red=0;refcount=6;을 얻을 수 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.