当前位置: 首页 > 知识库问答 >
问题:

通过引用分配php[重复]

韦嘉颖
2023-03-14

根据下面的php代码,输出为

1 . 1 
2 . 2 
3 . 3 

我理解&$ref是通过引用传递的。但在赋值之后类似($row=&$ref;)在任何地方,每当“row”更改值时,“ref”也会更改为与“row”相同的值。真的很迷惑。似乎=不仅将右值赋给左值。有人能核实一下吗?

<?php
$ref = 0;
$row = &$ref;
foreach (array(1, 2, 3) as $row) {
    print "$row . $ref \n" ;
}
echo $ref; 
?>

共有1个答案

秦焱
2023-03-14

在不深入研究技术细节的情况下,这里的基本思想是,您已经使$ref成为对$row的引用。具体而言,$row位于某个内存地址。如果你做一个简单作业

$ref = $row;

$ref$row的副本。如果你改变了一个,它就不会改变另一个

$row = &$ref;

$ref现在指向$row。所以它们本质上是同一个变量。它们指向相同的内存位置(过于简化,所以您可以理解)。

$data = ['1', '2', '3'];

function modVal(Array &$arr) {
    $arr[2] = '9';
}
modVal($data);
var_dump($data);
array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "9"
}

但是,从函数声明中删除&,输出变为

array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "2"
  [2]=>
  string(1) "3"
}

PHP有时会为您自动通过引用传递。例如,如果您实例化一个类并将该实例注入到函数中,它将自动通过引用传递。

 类似资料:
  • 本文向大家介绍PHP 通过引用分配,包括了PHP 通过引用分配的使用技巧和注意事项,需要的朋友参考一下 示例 这是引用的第一阶段。本质上,当您通过引用进行分配时,就是允许两个变量共享相同的值。 $foo和$bar是相等的在这里。他们没有指向对方。它们指向同一位置(“值”)。 您还可以在array()语言结构中通过引用进行分配。虽然不是严格按参考分配。 但是请注意,数组内部的引用具有潜在的危险。使用

  • 本文向大家介绍PHP通过引用传递参数用法分析,包括了PHP通过引用传递参数用法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP通过引用传递参数用法。分享给大家供大家参考,具体如下: 先看一个手册上的示例: 输出: 如果没有这个&符号, 输出: 更多关于PHP相关内容感兴趣的读者可查看本站专题:《php常用函数与技巧总结》、《php面向对象程序设计入门教程》、《PHP数学运算技巧总

  • 我有这两个函数,我试图修改元素。其中一个编译,另一个说“val不能重新分配”。以下函数有什么区别?为什么一个编译,另一个不编译? 编译的那个 那个说 无法重新分配Val

  • 问题内容: 我刚遇到一个错误。 当我尝试分配这样的对象时: 我得到的错误是“不赞成通过引用分配new的返回值”。实际上,我一直在寻找解决方案,但是我唯一看到的就是拒绝php.ini的政策(error_reporting)。我也尝试过,但是没有用。 真令人困惑。希望您能帮助我。提前致谢。 问题答案: 在PHP5中,不赞成使用这种用法 您确定您没有在示例代码中漏号吗?这将生成您声明的警告,但是它不是必

  • 问题内容: 我有以下代码: 有人可以解释为什么输出是:零一二二。 摘自zend认证学习指南。 问题答案: 因为在第二个循环中,仍然是对最后一个数组项的引用,所以每次都将其覆盖。 您可以看到这样的内容: 如您所见,最后一个数组项采用当前循环值:“零”,“一个”,“两个”,然后就是“两个” …:)

  • 问题内容: 我想知道在您仅读取变量时是否将其作为按引用传递的优良作法,还是应始终将其作为值传递。 引用传递示例: 传递值的示例: 哪个更好 ?例如,如果我要循环运行1000次? 循环示例: 问题答案: 如果您打算传递一个 值 (因此该函数不会对其进行修改) ,则没有理由通过引用传递它:这只会使您的代码更难以理解,因为人们会认为“ 此函数可以修改我将要修改的内容。传递给它-哦,它没有修改? ” 在您