背景: 深入理解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这块的源代码。
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这块的源代码。
作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/8878/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!
最后编辑: jackxiang 编辑于2016-8-11 16:12
评论列表