PHP中$a=1;$b=&$a;$c=(++$a)+(++$a)+(++$a); $c为啥等于10?
程序员文章站
2022-05-17 11:49:27
...
回复内容:
别讨论未定义行为了好不PHP: Operator Precedence 首先需要了解一下php源码有关引用计数,变量分离的知识。然后我们看下opcode:
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
这可以说是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。
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
相关文章
相关视频
推荐阅读
-
php 复制a.txt复制到b.txt,a.txt从第2行到10行复制到c.txt
-
检索 COM 类工厂中 CLSID 为 {13C28AD0-F195-4319-B7D7-A1BDAA329FB8} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。
-
PHP中$a && $b = $c 语法的用法
-
php扩展中c++单例模式的全局对象实例被生成多个子进程销毁,为啥?该如何解决
-
PHP中$a=1;$b=&$a;$c=(++$a)+(++$a)+(++$a); $c为啥等于10?
-
php扩展中c++单例模式的全局对象实例被生成多个子进程销毁,为啥?该如何解决
-
把字符串“a1b2c3b4d577777aab”中的所有数字都删除掉
-
js sort()函数 排序问题 var arr =['A-1-5-1','A-1-10-2','A-1-5-5','B-2-3-1','C-4-10-1'], 对这个数组进行排序,想达到的效果是["A-1-
-
PHP中$a=1;$b=&$a;$c=(++$a)+(++$a)+(++$a); $c为啥等于10?
-
检索 COM 类工厂中 CLSID 为 {13C28AD0-F195-4319-B7D7-A1BDAA329FB8} 的组件失败,原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))。