$a = 1;$b = &$a; //주소를 전달합니다. 이 줄을 주석 처리하면 5가 반환됩니다. 주석을 달지 않으면(PHP 버전 <7) 6$c = (++$a) + (++$a);echo $c;버전과 관련이 있습니까? ? 그리고 결과가 6이라니 정말 헷갈리네요
认证高级PHP讲师
이 작업은 $a和$b都指向原本$a变量所在的那块内存(为了方便后面解释,称为内存X),也就是说,后面任何对于$a或者$b의 모든 작업이 이 메모리의 값을 직접 수정하는 것으로 간주될 수 있습니다.
$a
$b
内存X
다음 줄을 추가한 후의 실행 프로세스는 다음과 같습니다.
이전 단계는 생략되었으며, 초기 a는 1
$c = (++$a) + (++$a)的两次++$a都是在操作内存X,也就是把内存X里的值自增了两次,所以,在运算$c的值的时候,取的是这个内存里数的值,也就是自增了两次之后的内存X里的值。所以,是3 + 3 = 6(运算$c时候,内存X에 저장된 값은 3)입니다.
$c = (++$a) + (++$a)
++$a
3 + 3 = 6
$c
인용되지 않은 경우 $a的自增接操作直接修改内存X,而后通过运算符操作返回内存X的副本,这样,两次的++$a结果由于不是直接从内存X获取的,而是改变内存X值之后的副本,所以$c在运算的时候就是2 + 3 = 5에 대한 것입니다.
内存X的副本
2 + 3 = 5
이것은 PHP의 기본 구현과 관련이 있습니다. github에서 동일한 문제에 대한 분석을 살펴보는 것이 좋습니다. https://github.com/xurenlu /ph...
C를 출력했는데, C가 B와 무슨 관련이 있나요?
먼저 참조 할당 추가 작업에 대해 이야기해 보겠습니다
으아악이 작업은
$a
和$b
都指向原本$a
变量所在的那块内存(为了方便后面解释,称为内存X
),也就是说,后面任何对于$a
或者$b
의 모든 작업이 이 메모리의 값을 직접 수정하는 것으로 간주될 수 있습니다.다음 줄을 추가한 후의 실행 프로세스는 다음과 같습니다.
이전 단계는 생략되었으며, 초기 a는 1
$c = (++$a) + (++$a)
的两次++$a
都是在操作内存X
,也就是把内存X
里的值自增了两次,所以,在运算$c的值的时候,取的是这个内存里数的值,也就是自增了两次之后的内存X
里的值。所以,是3 + 3 = 6
(运算$c
时候,内存X
에 저장된 값은 3)입니다.레퍼런스에 댓글을 달고 작업에 대해 이야기해보겠습니다
인용되지 않은 경우
$a
的自增接操作直接修改内存X
,而后通过运算符操作返回内存X的副本
,这样,两次的++$a
结果由于不是直接从内存X
获取的,而是改变内存X
值之后的副本,所以$c
在运算的时候就是2 + 3 = 5
에 대한 것입니다.이것은 PHP의 기본 구현과 관련이 있습니다. github에서 동일한 문제에 대한 분석을 살펴보는 것이 좋습니다.
https://github.com/xurenlu /ph...
C를 출력했는데, C가 B와 무슨 관련이 있나요?