有关PHP引用的问题
参考:PHP中的引用传递不仅限于函数参数- cloned.log。
以下是三个重点:
– 函数/方法参数的传递引用
– 赋值的引用赋值
– 函数/方法的引用返回
引用参数传递
对我来说,我经常忘记这一点。不管是作为临时参数使用&还是作为实际参数使用&,都感觉非常复杂。
$v = "default";
rewrite($v);
print $v;
function rewrite(&$arg) {
$arg = "HelloWorld";
}
只需要一种选择,用中文将以下内容进行释义:
函数/方法的引用返回
在这个领域,动态编程等技术悄无声息地发挥作用。
$hoge = "this is hoge";
function &fuga() {
return $this->value;
}
$fuga =& fuga();
$fuga = "this is fuga";
var_dump($hoge);//"this is fuga";
函数名称和返回值获取都需要使用&,在类中可变的属性部分添加访问器等等这样的情况非常方便。
我认为,当接收时将其拷贝,去掉引用可能会很方便。
以参照为基准
最后,可以通过赋值来传递引用。但是,我认为不太常用。
$hoge = "this is hoge";
$fuga =& $hoge;
$fuga = "this is fuga";
var_dump($fuga);
顺便说一句,foreach之类的也可以通过引用接收。当需要修改传递的值时,像$arr[$key]这样的操作可能会很频繁,但是这样$value的一侧会变得有点飘忽。光为了这个而专门使用array_keys之类的方法也有点麻烦。
foreach($arr as $key=>&$value)
{
$value = "new value";
//$arr[$key] = "new value"; // これだと$valueが浮く
}