> 백엔드 개발 > PHP 튜토리얼 > PHP中$a=1;$b=&$a;$c=(++$a)+(++$a)+(++$a); $c为啥等于10?

PHP中$a=1;$b=&$a;$c=(++$a)+(++$a)+(++$a); $c为啥等于10?

WBOY
풀어 주다: 2016-06-17 08:32:26
원래의
1596명이 탐색했습니다.

回复内容:

别讨论未定义行为了好不

PHP: Operator Precedence 首先需要了解一下php源码有关引用计数,变量分离的知识。然后我们看下opcode:

<code class="language-text">line     #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   3     0  E >   ASSIGN                                                   !0, 1
   4     1        ASSIGN_REF                                               !1, !0
   5     2        PRE_INC                                          $2      !0
         3        PRE_INC                                          $3      !0
         4        ADD                                              ~4      $2, $3
         5        PRE_INC                                          $5      !0
         6        ADD                                              ~6      ~4, $5
         7        ASSIGN                                                   !2, ~6
   6     8        SEND_VAR                                                 !2
         9        DO_FCALL                                      1          'var_dump'
        10      > RETURN                                                   1
</code>
로그인 후 복사
这可以说是PHP7以下版本的bug 怎么没人解释?难道7跟5就着点区别? php7中,$a=1;$b=&$a;$c=(++$a)+(++$a)+(++$a);结果$c是9。php5中,结果就是10. php5中:
$a=1;$b=&$a;$c=(++$a)+(++$a)+(++$a); //$c==10
$a=1;$b=&$a;$c=(++$a); //$c==2
$a=1;$b=&$a;$c=(++$a)+(++$a); //$c==6
php7里$a=1;$b=&$a;$c=(++$a)+(++$a)+(++$a);结果$c是9。
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿