1. 云栖社区>
  2. PHP教程>
  3. 正文

引用传递与值传递

作者:用户 来源:互联网 时间:2017-12-01 10:48:05

引用传递与值传递 - 摘要: 本文讲的是引用传递与值传递, 看代码: <?phpdefine("N", 10000);define("n", 10000);ini_set('memory_limit', '1G');function microtime_float(){    list($u

看代码:

<?php
define("N", 10000);
define("n", 10000);
ini_set('memory_limit', '1G');
function microtime_float()
{
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}

function printArray0(&$arr) //引用传递
{
   $arr[0] = rand(0,9);
   return ;
}
function printArray1($arr)   //值传递
{
   $arr[0] = rand(0,9);
   return;
}

for($i=0 ; $i < N; $i++)
$arr[] = rand(0,N);

$start = microtime_float();
for($i=0;$i<n;$i++){
    printArray0($arr);
//    $b[] = &$arr;
}
$end = microtime_float();
echo "NO1:",$end - $start,"<br>";

for($i=0 ; $i < N; $i++)
$a[] = rand(0,N);
$start1 = microtime_float();
for($i=0;$i<n;$i++){
    printArray1($a);
//    $c[] = $a;
}
$end1 = microtime_float();
echo "NO2:",$end1 - $start1,"<br>";

?>

在没有任何改变数组值得操作时(如注释掉:$arr[0] = rand(0,9);),两次耗时基本无差别。

但一旦有改变数组值得操作时,值传递耗时大大增加,而对引用传递的耗时影响不大。

值传递copy-on-write,引用传递change-on-write。


以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索,以便于您获取更多的相关知识。

弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率

40+云计算产品,6个月免费体验

现在注册,免费体验40+云产品,及域名优惠!

云服务器9.9元/月,大学必备