Php 变量引用错误?

Php 变量引用错误?,php,Php,我有一个无法理解的问题,下面的代码为什么是打印数组([a]=>1[b]=>2[c]=>3[d]=>),我没有更改$info变量,但为什么它会更改 <?php function ifSetOr(&$a, $b = null) { return isset($a) ? $a : $b; } $info = array('a' => 1, 'b' => 2, 'c' => 3); ifSetOr($info['d']); print_r($info); //A

我有一个无法理解的问题,下面的代码为什么是打印数组([a]=>1[b]=>2[c]=>3[d]=>),我没有更改$info变量,但为什么它会更改

<?php
function ifSetOr(&$a, $b = null) {
    return isset($a) ? $a : $b;
}

$info = array('a' => 1, 'b' => 2, 'c' => 3);
ifSetOr($info['d']);
print_r($info); //Array ( [a] => 1 [b] => 2 [c] => 3 [d] => ) 
?>

当您将其作为引用传递时,您隐式创建了
$info['d']


因此,像这样的ifSetOr函数永远不会工作。不能传递不存在的变量。还要记住,
isset
的“参数”是一个例外,因为
isset
实际上不是一个函数,而是一个语言构造。

当您将它作为引用传递时,您隐式创建了
$info['d']


因此,像这样的ifSetOr函数永远不会工作。不能传递不存在的变量。还请记住,
isset
的“参数”是一个例外,因为
isset
实际上不是一个函数,而是一个语言构造。

您尝试访问
$info['d']
并将对它的引用传递给一个函数。由于它不存在,因此无法被引用,PHP自动创建了它。至少这是我的猜测。请注意,
isset
不是函数,它是一种语言构造,工作方式与函数不同。您尝试访问
$info['d']
,并将对它的引用传递给函数。由于它不存在,因此无法被引用,PHP自动创建了它。至少这是我的猜测。请注意,
isset
不是一个函数,它是一种语言构造,工作方式与函数不同。我如何避免这个问题?@joe:我看到的唯一选择是将数组和键名传递给函数,并返回isset$a[$key]…。难道没有更好的解决方案吗?反问:除了数组元素之外,您真的需要这个吗?如果是这样的话,您的代码可能首先需要其他改进。我如何避免这个问题?@joe:我看到的唯一替代方法是将数组和键的名称传递给函数,并返回isset$a[$key]…。没有更好的解决方案吗?反问:除了数组元素之外,您真的需要这个吗?如果是这样,您的代码可能首先需要其他改进。