> 백엔드 개발 > PHP 튜토리얼 > php的函数的形参refcount为何要加2?

php的函数的形参refcount为何要加2?

WBOY
풀어 주다: 2016-06-06 20:50:04
원래의
1082명이 탐색했습니다.

<code><?php $b = 1;
a($b);
function a($a){
   xdebug_debug_zval('a');//refcount=3 why not 2??
}
</code></code>
로그인 후 복사
로그인 후 복사

回复内容:

<code><?php $b = 1;
a($b);
function a($a){
   xdebug_debug_zval('a');//refcount=3 why not 2??
}
</code></code>
로그인 후 복사
로그인 후 복사

好吧,德问的lazyboy帮我查到答案了: 形参传值时的refcount

php的函数的形参refcount为何要加2?

例子内容来自http://julien-pauli.developpez.com/tutoriels/php/internals/variables/?page=page_6

A refcount of 2, here, is extremely non-obvious. Especially considering the above examples. So what's happening?

When a variable has a single reference (as did $var1 before it was used as an argument to debugzvaldump()), PHP's engine optimizes the manner in which it is passed to a function. Internally, PHP treats $var1 like a reference (in that the refcount is increased for the scope of this function), with the caveat that if the passed reference happens to be written to, a copy is made, but only at the moment of writing. This is known as "copy on write."

So, if debugzvaldump() happened to write to its sole parameter (and it doesn't), then a copy would be made. Until then, the parameter remains a reference, causing the refcount to be incremented to 2 for the scope of the function call.

xdebugdebugzval 是采用引用的方式传值的。

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿