>  기사  >  백엔드 개발  >  PHP 변수 분리 및 참조에 대한 질문

PHP 변수 분리 및 참조에 대한 질문

WBOY
WBOY원래의
2016-10-22 00:14:16984검색

오늘은 PHP 변수 분리 및 참조에 대한 Brother Niao의 기사를 읽었습니다. 이해하지 못한 문제가 있어서 먼저 스크린샷을 게시하겠습니다.

PHP 변수 분리 및 참조에 대한 질문

위의 설명을 따르면 다음과 같이 코드를 약간 수정하겠습니다.

<code><?php
   $var = "laruence";
   $var_dup = &$var;
   $var_ref = &$var;
   $var_ref = "OK";
?>
</code>

그럼

두 번째 코드 줄:
$var_dup 및 $var는 동일한 zval을 가리키고 refcount는 2입니다.

세 번째 줄 실행 시:
PHP는 연산할 zval의 refcount가 1보다 큰 것을 발견하면 Separation을 실행하고, $var_dup을 분리하고, $var와 $를 분리합니다. var_ref는 쓰기 연결 시 변경됩니다. 즉, refcount=2, is_ref=1;

네 번째 줄로 진행하면:
$var과 $var_ref가 가리키는 zval은 is_ref=1;이므로 분리되지 않으므로 값이 ​​​​$var_ref와 $var 모두 "OK"입니다.

제가 이해한 바에 따르면, 프로그램 마지막에는 세 번째 줄 실행 시 $var_dup이 분리되었기 때문에 그 값은 "laruence"로 유지되어야 하는데, 프로그램을 실행해보니 그 값도 바뀌었습니다. "OK"라고 대답하면 매우 혼란스러워집니다. 답을 아는 사람이 도움을 줄 수 있기를 바랍니다. 제가 잘못 이해한 건지, 아니면 또 다른 숨은 뜻이 있는 건지 모르겠네요 감사합니다!

참고용으로 작은 밤 두 개를 첨부했습니다.

<code><?php
   $var = "laruence";
   $var_ref = "OK";
   $var_dup = &$var;
   $var = &$var_ref;


   echo $var;        //OK
   echo $var_dup;    //laruence
   echo $var_ref;    //OK      
?>
</code>
<code><?php
   $var = "laruence";
   $var_ref = "OK";
   $var_dup = &$var;
   $var_ref = &$var;


   echo $var;        //laruence
   echo $var_dup;    //laruence
   echo $var_ref;    //laruence      
?>
</code>

답글 내용:

오늘은 PHP 변수 분리 및 참조에 대한 Brother Niao의 기사를 읽었습니다. 이해하지 못한 문제가 있어서 먼저 스크린샷을 게시하겠습니다.

PHP 변수 분리 및 참조에 대한 질문

위의 설명을 따르면 다음과 같이 코드를 약간 수정하겠습니다.

<code><?php
   $var = "laruence";
   $var_dup = &$var;
   $var_ref = &$var;
   $var_ref = "OK";
?>
</code>

그럼

두 번째 코드 줄:
$var_dup 및 $var는 동일한 zval을 가리키고 refcount는 2입니다.

세 번째 줄 실행 시:
PHP는 연산할 zval의 refcount가 1보다 큰 것을 발견하면 Separation을 실행하고, $var_dup을 분리하고, $var와 $를 분리합니다. var_ref는 쓰기 연결 시 변경됩니다. 즉, refcount=2, is_ref=1;

네 번째 줄로 진행하면:
$var과 $var_ref가 가리키는 zval은 is_ref=1;이므로 분리되지 않으므로 값이 ​​​​$var_ref 및 $var 모두 "OK"입니다.

제가 이해한 바에 따르면, 프로그램 마지막에는 세 번째 줄 실행 시 $var_dup이 분리되었기 때문에 그 값은 "laruence"로 유지되어야 하는데, 프로그램을 실행해보니 그 값도 바뀌었습니다. 대답을 아는 사람이 나를 도울 수 있기를 바랍니다. 제가 잘못 이해한 건지, 아니면 또 다른 숨은 뜻이 있는 건지 모르겠네요 감사합니다!

추가로 참고용으로 작은 밤 2개가 붙어있습니다.

<code><?php
   $var = "laruence";
   $var_ref = "OK";
   $var_dup = &$var;
   $var = &$var_ref;


   echo $var;        //OK
   echo $var_dup;    //laruence
   echo $var_ref;    //OK      
?>
</code>
<code><?php
   $var = "laruence";
   $var_ref = "OK";
   $var_dup = &$var;
   $var_ref = &$var;


   echo $var;        //laruence
   echo $var_dup;    //laruence
   echo $var_ref;    //laruence      
?>
</code>

Copy On Write! ! ! ! ! ! ! ! ! ! ! !
写时复制! ! ! ! ! ! ! ! ! ! ! !

코드 세 번째 줄에 쓰기 작업이 있나요? 분리를 수행할 필요가 없습니다! ?
세 번째 동작은 리카운트를 3으로 늘리는 것입니다.

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