>  기사  >  백엔드 개발  >  PHP에서 가변 변수와 참조 할당의 차이점은 무엇입니까?

PHP에서 가변 변수와 참조 할당의 차이점은 무엇입니까?

怪我咯
怪我咯원래의
2017-06-20 09:56:411235검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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