PHP 커널의 관점에서 설명하겠습니다.
PHP 변수는 C 언어의 zval 구조를 통해 커널에 저장됩니다. 아직 배우지 않았습니다) C, 객체로 이해하면 됩니다. 내부의 멤버 변수는 모두 클래스의 속성이므로 지금은 이렇게 이해하겠습니다), zval 구조는 다음과 같습니다.
struct _zval_struct { zvalue_value value; // 存储变量的值 zend_uint refcountgc; //表示引用计数 默认为:1 zend_uchar type; // 变量具体的类型 zend_uchar is_refgc; //表示是否为引用 };
예를 들어, php 코드는 다음과 같습니다:
$a = 10; $b = $a;
이때 $b에는 참조가 없으며 단지 $a의 값을 $b에 할당한 다음 zval 구조의 refcountgc가 2가 되고 is_refgc는 여전히 false입니다. 커널 $a가 이미 메모리 공간을 열었기 때문에 참조되지 않았음을 나타냅니다. $a가 $b에 할당되면 $b의 값은 $a만 가리키므로 조각을 다시 열 필요가 없습니다. 그러나 $b의 값이 변경되면($a의 값은 변경되지 않음) $b가 새로운 메모리 공간을 열게 됩니다. 이것이 소위 쓰기 중 복사(Copy-On-Write)입니다. 커널에 저장된 PHP 변수는 다음과 같습니다.
$a = 10; $b = &$a;
이때 커널에 저장된 $a의 구조는 is_refgc true로 표시되면 참조라는 뜻이고, $a와 $b입니다. 둘 다 동일한 메모리 주소를 가리킵니다. $b=20이면 $a도 20
위 내용은 PHP에서 가변 변수와 참조 할당의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!