出于可伸缩目的,我通常将参数作为关联数组(由于数组很容易更改)和 extract()
的函数:
$a = 'a'; ....... $n = 'n';
$arg = array(
'a' => $a,
.
.
'n' => $n
);
function doStuff($arg) {
extract($arg);
// etc
}
,但我未能尝试执行相同的操作,但是通过参考将$ arg的变量(s)组件传递。例如,要获得以下结果:
$a = 'x';
我可以做到这一点:
$a = 'a';
function doStuff(&$var) {
$var = 'x';
}
doStuff($a);
echo $a; // ---> echoes 'x'
您如何使用提取方法执行此操作?例如,以下回声'a',而不是'x':
$a = 'a'; ....... $n = 'n';
$arg = array(
'a' => $a,
.
.
'n' => $n
);
function doStuff(&$arg) {
extract($arg);
$a = 'x';
}
doStuff($arg);
echo $a; // echoes 'a'
我也尝试过:
$arg = array(
'a' => &$a,
.
.
'n' => $n
);
是否可以在此处使用extract()
将$a
回波为'x'?
我使用了帕特里克Q的评论作为正确答案:
$a = 'a'; ....... $n = 'n';
$arg = array(
'a' => &$a,
.
.
'n' => $n
);
function doStuff($arg) {
extract($arg, EXTR_REFS);
$a = 'x';
}
doStuff($arg);
echo $a; // echoes 'x'
当您传递 $ arg 数组时,它是 $ arg arg 数组,必须更改以反映此更改在功能范围中,我认为您需要使用组合或构建 $ arg 返回其他任何其他方式,并具有更改的值:
function doStuff(&$arg) {
extract($arg);
$a = 'x';
$arg = combine(...);
// OR
$arg = ['a' => $a];
}
看到它运行:http://sandbox.onlinephpfunctions.com/code/70b4b5e7d90b82958888888888aaaa0b3caf621fa1b5ed3