我很难理解PHP的内存模型。
具体来说,我应该如何更改$fn
以便$b
引用$a
和var_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);
答案 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);