오늘은 PHP 변수 분리 및 참조에 대한 Brother Niao의 기사를 읽었습니다. 이해하지 못한 문제가 있어서 먼저 스크린샷을 게시하겠습니다.
위의 설명을 따르면 다음과 같이 코드를 약간 수정하겠습니다.
<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의 기사를 읽었습니다. 이해하지 못한 문제가 있어서 먼저 스크린샷을 게시하겠습니다.
위의 설명을 따르면 다음과 같이 코드를 약간 수정하겠습니다.
<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으로 늘리는 것입니다.