PHP中返回引用类型的方法
程序员文章站
2023-04-03 09:27:08
返回引用,在定义和调用的时候 & 都不可以省略。
这是个比较容易混淆的概念,如果不是出于某些特殊的原因,建议还是不要使用。
说他很容易混,是因为 reference 在...
返回引用,在定义和调用的时候 & 都不可以省略。
这是个比较容易混淆的概念,如果不是出于某些特殊的原因,建议还是不要使用。
说他很容易混,是因为 reference 在 php5 中的变化,造成其在 php4/php5 中表现的行为差异比较大。
举个例子说明:
复制代码 代码如下:
<?php
$color = 'yellowgreen';
function &getref() {
global $color;
return $color;
}
function getcopy() {
global $color;
return $color;
}
$colorref = &getref();
$colorref = 'blue';
//$colorcopy = getcopy();
//$colorcopy = 'black';
var_dump($color);
var_dump($colorref);
//var_dump($colorcopy);
运行一遍上面的代码,差不多就明白了,使用 &getref() 将把 $colorref 绑定到 $color 上面,也就是说 $colorref 和 $color 两个变量是指向同一个值了。当改变其中一个值时,另一个也会跟着变化。
如果 $color 是一个数组,也是一样的,上面的代码在 php4/5 的任意版本中,表现行为都是一样的。
当 $color 是一个 object 的时候,问题就出现了。
php4 中 getcopy 仍然会返回一个复制的 object;&getref() 返回引用。
php5 中就有点另类了,
最新的 php5.2,行为和 php4 一样,getcopy() 返回复制,&getref() 返回引用。
但是某些的 php5 的版本这里稍微有些不同,比如 php5.1.6,表现为 getcopy() 和 &getref() 都是引用。
这里 getcopy() 和 &getref() 是两个全局函数,如果放到类里面成为类的 member functions,那又会是另外一番景象……
ps:返回 references 并不会提高性能,有时候反而降低性能,所以不要想当然的使用这个特性来“优化”程序。
有问题看看手册大部分时候都可以找到答案:
推荐阅读
-
php获取url地址中的域名几种方法
-
PHP5中使用PDO连接数据库的方法_php技巧
-
探讨:php中在foreach中使用foreach ($arr as &$value) 这种类型的解释
-
php5中date()得出的时间为什么不是当前时间的解决方法
-
PHP中防止直接访问或查看或下载config.php文件的方法_PHP
-
php数组中包含中文的排序方法
-
PHP中读取文件的8种方法和代码实例,
-
php实现将wav文件转换成图像文件并在页面中显示的方法_PHP教程
-
Symfony2实现在controller中获取url的方法_PHP
-
一个显示某段时间内每个月的方法 返回由这些月份组成的数组_PHP教程