【发布时间】:2021-10-31 03:17:57
【问题描述】:
我有这个不起作用的函数。
$b 是一个外部字符串,应该与应该返回一组字符串的 $a 数组绑定。
$a=array('this','is');
function chkEdt($a,$b) {
$a[]=$b;
};
print_r($a);
结果 -> 数组();
为什么?
【问题讨论】:
-
如果你想让函数改变传递给它的参数的值,你需要pass by reference。
我有这个不起作用的函数。
$b 是一个外部字符串,应该与应该返回一组字符串的 $a 数组绑定。
$a=array('this','is');
function chkEdt($a,$b) {
$a[]=$b;
};
print_r($a);
结果 -> 数组();
为什么?
【问题讨论】:
您需要将其设为参考参数。
function chkEdt(&$a,$b) {
$a[]=$b;
};
那么在函数中对$a 的任何更改都会影响用作参数的数组变量。
【讨论】:
您的示例从未真正调用 chkEdt 函数,并且该函数从不返回任何内容。
除此之外,变量在函数内部和外部具有不同的作用域——即使它们共享一个名称,它们也被认为是不同的变量,因为其中一个在函数内部。阅读https://php.net/manual/en/language.variables.scope.php了解更多详情。
你可以像Barmar's answer那样通过引用传递变量,或者你可以让函数返回一个值,然后将函数外部的$a重新分配给函数返回的值——像这样:
$a = array('this','is');
function chkEdt($a,$b) {
$a[] = $b;
return $a;
};
$a = chkEdt($a, "a");
print_r($a);
现场演示:http://sandbox.onlinephpfunctions.com/code/00d19028b3909ca415b81e93c26a6ede9188c743
为了澄清差异,您可以在函数中使用不同的变量名重新编写函数,并获得相同的结果:
$a = array('this','is');
function chkEdt($z,$b) {
$z[] = $b;
return $z;
};
$a = chkEdt($a, "a");
print_r($a);
【讨论】: