1

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

具体来说,我应该如何更改$fn以使$breferences$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);
4

2 回答 2

1

像这样:

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

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

结果:

array(1) { ["a"]=> int(1) }
于 2013-09-05T01:50:22.930 回答
0

最简单的方法是使参数成为对象,因为对象总是通过引用传递。ArrayObject的一个实例可以在这种简单的情况下工作。我必须说,尽管您正在处理我从未遇到过的用例,或者您的应用程序结构的设计存在根本缺陷,但这是需要的。

<?php
$a = new ArrayObject(array());
$fn = function() use (&$a) {
    return $a;
};
$b = $fn();
$b["a"] = 1;
var_dump($a);
于 2013-09-05T01:49:14.713 回答