PHP通过引用:理解[重复]

Posted

技术标签:

【中文标题】PHP通过引用:理解[重复]【英文标题】:PHP pass by reference : understanding [duplicate] 【发布时间】:2016-02-21 01:50:54 【问题描述】:

我正在学习 php 的基本概念。这是引用变量的代码。 有人可以为我解释一下。

<?php
$foo = 'Bob';              // Assign the value 'Bob' to $foo
$bar = &$foo;              // Reference $foo via $bar.
$car = &$bar;

$bar = "My name is $bar";  // Alter $bar...

echo $bar ."\n\n";
echo $foo ."\n\n";                 // $foo, $car are altered too.
echo $car ."\n\n";                 // $foo, $car are altered too.
//My name is bob
//My name is bob
//My name is bob
?>

【问题讨论】:

【参考方案1】:

试试这个..

您可以通过引用函数来传递变量,以便函数可以修改变量。语法如下:

<?php
function foo(&$var)

    $var++;


$a=5;
foo($a);
// $a is 6 here
?>

注意:函数调用没有参考符号 - 仅在函数定义上。仅函数定义就足以通过引用正确传递参数。从 PHP 5.3.0 开始,当您在 foo(&$a); 中使用 & 时,您将收到一条警告说“调用时传递引用”已被弃用。并且从 PHP 5.4.0 开始,调用时传递引用已被删除,因此使用它会引发致命错误。

通过引用传递

引用允许两个变量引用相同的内容。换句话说,一个变量指向它的内容(而不是成为那个内容)。通过引用传递允许两个变量以不同的名称指向相同的内容。与号 ( & ) 放在要引用的变量之前。

$a = 1;
$b = &$a; // $b references the same value as $a, currently 1
$b = $b + 1; // 1 is added to $b, which effects $a the same way
echo "b is equal to $b, and a is equal to $a";

输出:

b is equal to 2, and a is equal to 2

当您希望简单地更改原始变量并再次将其返回到相同的变量名称并为其分配新值时,请将其用于函数。

function add(&$var) // The &amp; is before the argument $var
$var++;

$a = 1;
$b = 10;
add($a);
echo "a is $a,";
add($b);
echo " a is $a, and b is $b"; //

输出:

a is 2, a is 2, and b is 11

您也可以这样做以使用 foreach 更改数组:

$array = array(1,2,3,4);
foreach ($array as &$value)
$value = $value + 10;

unset ($value); // Must be included, $value remains after foreach loop
print_r($array);

**Output:**

Array ( [0] => 11 [1] => 12 [2] => 13 [3] => 14 )

参考:http://php.net/manual/en/language.references.pass.php

http://www.phpreferencebook.com/samples/php-pass-by-reference/

【讨论】:

以上是关于PHP通过引用:理解[重复]的主要内容,如果未能解决你的问题,请参考以下文章

reset() -“严格标准:只有变量应该通过引用传递”[重复]

如何在php中通过引用传递无限参数[重复]

对引用引用的函数的直观理解[重复]

password_hash 给出错误:严格标准:只有变量应该通过引用传递[重复]

没有通过引用[重复]看到动作对向量的最后一个元素的影响

PHP正则表达式 - 替换一个反向引用[重复]