<?php $a = "new string"; ?>
위의 예에서 새 변수 a는 현재 범위에서 생성됩니다. 그리고 문자열 유형과 새 문자열 값의 변수 컨테이너가 생성됩니다. 추가 2바이트 정보에서는 사용자 정의 참조가 생성되지 않으므로 "is_ref"가 기본적으로 FALSE로 설정됩니다.
이 변수 컨테이너를 사용하는 변수는 하나만 있기 때문에 "refcount"는 1로 설정됩니다. "refcount" 값이 1인 경우 "is_ref" 값은 항상 FALSE입니다. xdebug_debug_zval() 함수를 호출하여 "refcount"와 "is_ref"의 값을 표시할 수 있습니다.
예제 #2 zval 정보 표시
<?php xdebug_debug_zval('a'); ?>
위 루틴의 출력은 다음과 같습니다.
a: (refcount=1, is_ref=0)='new string'
한 변수를 다른 변수에 할당하면 참조 수(refcount)가 늘어납니다.
예제 #3 zval의 참조 개수 늘리기
<?php $a = "new string"; $b = $a; xdebug_debug_zval( 'a' ); ?>
위 루틴은 다음을 출력합니다.
a: (refcount=2, is_ref=0)='new string'
이때 동일한 변수 컨테이너가 변수 a 및 변수 b와 연결되어 있으므로 참조 수는 2입니다. PHP는 필요하지 않을 때 생성된 변수 컨테이너를 복사하지 않습니다.
"refcount"가 0이 되면 변수 컨테이너가 삭제됩니다. 변수 컨테이너와 연결된 변수가 해당 범위를 벗어나거나(예: 함수 실행 종료) 변수에 대해 unset() 함수가 호출되면 "refcount"가 삭제됩니다.
예제 #4 참조 횟수 감소
<?php $a = "new string"; $c = $b = $a; xdebug_debug_zval( 'a' ); unset( $b, $c ); xdebug_debug_zval( 'a' ); ?>
위 루틴은 다음을 출력합니다:
a: (refcount=3, is_ref=0)='new string' a: (refcount=1, is_ref=0)='new string'
이제 유형과 값을 포함하여 unset($a);을 실행하면 변수 컨테이너는 다음과 같이 됩니다. 메모리에서 삭제됩니다.
관련 권장 사항:
PHP 비디오 튜토리얼: https://www.php.cn/course/list/29/type/2.html
위 내용은 PHP 가비지 수집 메커니즘 예제 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!