标题: [实践OK]深入理解PHP原理之变量分离/引用(Variables Separation) 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Thu, 11 Aug 2016 15:41:56 +0000 作者:jackxiang 地址:http://jackxiang.com/post/8878/ 内容: 背景: 深入理解PHP原理之变量分离/引用(Variables Separation) 之自己+1,这个refcount是否+1的问题。 Q: 有时候会在原有数值的基础上改变吧 比如$var++ A:两种情况,那个对象就不测试了: 情况1,字符: ---------- 调试PHP ---------- string(5) "jackX" refcount(2) string(5) "jackY" refcount(2) 输出完成 (耗时 0 秒) - 正常终止 情况2,整数: ---------- 调试PHP ---------- long(1) refcount(2) long(2) refcount(2) 输出完成 (耗时 0 秒) - 正常终止 说明,$var++; 并没有改变自己的refcount值。而像:$var_dup = $var;就会+1了哟: ---------- 调试PHP ---------- string(5) "jackX" refcount(2) string(5) "jackY" refcount(3) <---看,这儿+1,等于3了,$var_dup = $var;会加1,得证。 输出完成 (耗时 0 秒) - 正常终止 实践来源:http://www.laruence.com/2008/09/19/520.html 疑问: ---------- 调试PHP ---------- string(8) "laruence" refcount(3) string(8) "laruence" refcount(3) long(1) refcount(2) string(8) "laruence" refcount(2) 输出完成 (耗时 0 秒) - 正常终止 可能是: 作为函数的参数穿进去的时候,函数的实参使用了,所以+1,函数电用完,实参也回收了,所以变回2,应该是这样,实践如下: ---------- 调试PHP ---------- string(9) "jackxiang" refcount(2) string(9) "jackxiang" refcount(2) string(9) "jackxiang" refcount(2) 输出完成 (耗时 0 秒) - 正常终止 运行debug_zval_dump后不是又变回去了?按这样说,那前面的结论都TM错了,$var ++,其refcount也是加了1的。这就是结论。要看是这么玩的,得看PHP这块的源代码。 Generated by Jackxiang's Bo-blog 2.1.1 Release