在PHP中返回引用

时间:2013-09-05 01:37:23

标签: php reference php-5.3

我很难理解PHP的内存模型。

具体来说,我应该如何更改$fn以便$b引用$avar_dump打印非空数组?

$a = array();
$fn = function() use (&$a) {
    return $a;
};
$b = $fn();
$b['a'] = 1;
var_dump($a);

(更一般地说,对于我何时/如何使用参考资料,你有推荐的参考资料吗?)

编辑:其他语言的示例,其中a变为非空。

的Python:

a = {}
def fn():
    return a;
b = fn()
b['a'] = 1
print a

的Javascript

var a = {};
var fn = function() {
   return a;
};
b = fn();
b['a'] = 1;
console.log(a);

2 个答案:

答案 0 :(得分:1)

像这样:

$a = array();
$fn = function &() use (&$a) {
    return $a;
};
$b = &$fn();
$b['a'] = 1;
var_dump($a);

第二行中的&()表示$fn应该返回引用,而第5行中的= &$fn()表示应该通过引用分配$ b。

结果:

array(1) { ["a"]=> int(1) }

答案 1 :(得分:0)

最简单的方法是将参数设为对象,因为对象总是通过引用传递。 ArrayObject的实例可以在这个简单的情况下工作。我必须说,虽然您要么处理我从未遇到的用例,要么在应用程序结构设计中存在根本缺陷,这是必要的。

<?php
$a = new ArrayObject(array());
$fn = function() use (&$a) {
    return $a;
};
$b = $fn();
$b["a"] = 1;
var_dump($a);