当前位置: 首页 > 面试题库 >

“&”运算符在PHP函数中如何工作?

诸葛雅达
2023-03-14
问题内容

请查看以下代码:

function addCounter(&$userInfoArray) {
    $userInfoArray['counter']++;
    return $userInfoArray['counter'];
}

$userInfoArray = array('id' => 'foo', 'name' => 'fooName', 'counter' => 10);
$nowCounter = addCounter($userInfoArray);

echo($userInfoArray['counter']);

这将显示11。

但!如果在功能参数中删除“&”运算符,则结果将为10。

这是怎么回事?


问题答案:

&运营商告诉PHP不要把它传递给函数时数组复制。取而代之的是,将对数组的 引用 传递给函数,因此函数修改了原始数组而不是副本。

只要看这个最小的例子:

<?php
function foo($a) { $a++; }
function bar(&$a) { $a++; }

$x = 1;
foo($x);
echo "$x\n";    
bar($x);
echo "$x\n";
?>

在这里,输出为:

1
2

–的呼叫foo未修改$xbar另一方面,打到了。



 类似资料:
  • 问题内容: 我正在尝试了解轮班经营者,但收获不多。当我尝试执行以下代码时 我得到以下 有人可以解释一下吗? 问题答案: 将二进制2()向左移动11次。因此:1000000000000 将二进制2()向左移动22次。因此: 现在,int为4字节,因此为32位。因此,当你偏移33时,它等效于偏移1。因此:100

  • 问题内容: 我有和数组两个值,我想在选择查询中将它与sql IN运算符一起使用。 这是我桌子的结构 我有两个值的数组 我想获取comp_id 1和comp_id 2的记录。因此,我编写了以下查询。 但是它不会返回结果。 问题答案: 由于您拥有普通 整数 就可以做到… (由于不断出现,一些其他信息…) 如果使用 字符串 (特别是 不受信任的 )输入,可以做到 但不能处理NULL之类的值。并会添加引号

  • 问题内容: $test = array(‘hi’); $test += array(‘test’,’oh’); var_dump($test); PHP中的数组意味着什么? 问题答案: 引用PHP语言操作员手册 +运算符返回添加到左侧数组的右侧数组;对于两个数组中都存在的键,将使用左侧数组中的元素,而右侧数组中的匹配元素将被忽略。 所以如果你这样做 你会得到 因此,的逻辑等效于以下代码段: 如果您

  • 问题内容: 让我们来一个带有以下代码的file.js: 现在,我们有另一个JS文件,我们在其中执行以下操作: 在r1情况下,它按预期工作-r1包含对新创建对象的引用。 在r2情况下,它不起作用-r2从file.js中获取对module.exports的引用。 目的是通过调用func()构造函数来创建一个新对象。当然,我也可以用等于r1的方式来做: 但是,我不明白为什么r2的行为方式与r1不同。 围

  • 主要内容:PHP 算术运算符,实例,实例,PHP 赋值运算符,实例,实例,PHP 递增/递减运算符,实例,PHP 比较运算符,实例,PHP 逻辑运算符,PHP 数组运算符,实例,三元运算符,实例,实例,组合比较符(PHP7+),实例,运算符优先级,实例,实例本章节我们将讨论 PHP 中不同运算符的应用。 在 PHP 中,赋值运算符 = 用于给变量赋值。 在 PHP 中,算术运算符 + 用于把值加在一起。 PHP 算术运算符 运算符 名称 描述 实例 结果 x + y 加 x 和 y 的和 2 +

  • 问题内容: 结果=>“ asdf” 结果=>“ qwer” 我不明白这些东西是如何工作的。我以为字符串上的布尔运算符会导致类型错误,但事实并非如此。它是否类似于预定义语句,例如“ a if b else c”? 问题答案: 确定答案后,Python 和 和 或 操作停止,并返回上一个扫描对象的值。它们不返回 True 或 False 。我喜欢这个功能,发现自己一直在使用它。 由于非空字符串算作Tr