通过实例看php地址引用的效率问题,注意看注释。
echo 'begin time:'.$begin=microtime(false).'<br/>';//begin to count time
$array=array();
for ($i=1;$i<=10000;$i++) {//产生一个很大的数组
$array[$i]=$i;
}
/*
$arr=$array;//拷贝 拷贝并打印总时间0.02
foreach ($arr as $ar) {
echo $ar.'<br/>';
}
*/
/*
$newarr=&$array;//地址引用 时间总是控制在0.01之内 地址引用的优势体现出来了
foreach ($newarr as $r) {
echo $r.'<br/>';
}
*/
foreach ($array as $a) {//基本是0.02 很少是0.01 为什么没有地址引用的快呢?纳闷
echo $a.'<br/>';
}
echo 'end time:'.$end=microtime(false).'<br/>';//end to count time
echo 'total time:'.($end-$begin);
?>
您可能感兴趣的文章:
php引用传值的详细介绍
通过实例理解php中传值与传引用的区别
有关php引用地址改变变量值的问题
PHP中的引用,“&”解释
本文为大家介绍一种在php中返回一个唯一在本地系统中独一无二的字符串的方法,供大家学习参考。
UUID(Universally Unique Identifier),GUID都是希望在整个时空范围内能产生唯一识别码,这在分布式计算环境下是必要的. 然而,如果仅仅是想在一个受限定的局部环境下,想生成一个"局部唯一识别码",使用UUID就是杀鸡用牛刀,这个"局部唯一识别码",称之为LUID(Local Unique Identifier)
比如我在用php开发网站程序时,为避免用户同时多次打开同一个网页导致session名称冲突问题, 就希望保存的session不是$_SESSION['param'],而是$_SESSION[$luid]['param'],再通过其他方式传递$luid值,保证'param'参数不被覆盖. 查找了一下别人的解决方式,都是生成UUID,而生成UUID的算法洋洋洒洒上百行。
考虑到因为是在SESSION空间里,是一个受限定的环境,其唯一性的强度不必太高,只要在同一个SESSION的生存期限内唯一就可以了,看下面的代码:
/**
* 返回一个唯一在本地系统中独一无二的字符串,
* 返回的是32个字符的字符串,形式如'7dac352074f221f3edc74d265c65a636',或'd198d8fc56ffed627f3f8313d6f06acf'
*/
function LUID(){
return MD5(microtime());
}
?>
其实就一行:return MD5(microtime());
按道理microtime()返回的字符串就已经是唯一的了,测了一下,即使连续执行microtime(),返回值也有100us以上的差别,而使用者点击,并在网络上传递再由服务器处理的间隔远不止几十ms,加上md5只是让结果杂乱化。
代码如下。
$foo = 'Bob'; // 将 'Bob' 赋给 $foo
$bar = &$foo; // 通过 $bar 引用 $foo
echo $foo.'<br/>';
$bar = "My name is $bar"; // 修改 $bar 变量
echo $bar.'<br/>';
echo $foo.'<br/>'; // $foo 的值也被修改
?>
输出:
Bob
My name is Bob
My name is Bob
可以看到原始值被修改了,发生在引用且被赋值之后,但被赋值之前原始变量是不会改变的。
您可能感兴趣的文章:
php引用传值的详细介绍
通过实例理解php中传值与传引用的区别
通过实例看php地址引用的效率问题
PHP中的引用,“&”解释