PHP函数的参数按值传递跟引用传递哪个效率更高

原创
2016-06-13 12:21:14 1050浏览

PHP函数的参数按值传递和引用传递哪个效率更高?
按值传递

function abc($t){
$c=$t;
}

引用传递
function abc(&$t){
$c=$t;
}

我把很长的一篇文章赋给变量$t,然后循环10万次 abc($t), 发现按值传递的速度要比引用传递快不少

我无法理解的是,为什么PHP中按值传递反而快呢?理论上讲按值传递有个复制的过程,而引用是直接指向内存地址,应该引用传递更快才对,希望各位能解答我的问题。

另外有什么讲PHP执行效率的书籍,推荐下,谢谢
------解决思路----------------------
在PHP中,对于&引用操作符采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。

当你在使用&符号把$a数组传入函数时,PHP引擎会认为这个函数可能会导致对$a的改变,此时就会自动为$b生产一个$a的数据拷贝,重新申请一块内存进行存储。这就是前面提到的“写时拷贝”概念。

你可以测试对比一下用值传递与引用传递执行效率,比如外面加入一个循环1000次,看看运行的耗时,结果会让你知道不正确使用PHP引用&符号会导致性能下降30%以上。

因为多了一项拷贝的操作,所以会导致系统资源的耗费(尤其是大数组的情况),因此,在PHP中,要尽量使用值传递,而少用引用传递。
------解决思路----------------------
所以说是要不断地学习
由#4
125544 一开始的内存占用量
126640 定义了 $a 之后,增加了 1096
f1:126656 传值调用 f1,增加了 16(应该是一个指向$a的指针之类的东西)
f1:126688
126656 从 f1 返回后,尚有 16 未释放
f2:126672 传引用调用 f2,增加了 16
f2:125656
125656 从 f2 返回后,内存占有还原(126656)

可以看到:以往资料上说的创建副本、写时拷贝等等都已经过时了!
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。