【问题标题】:PHP pass by reference : understanding [duplicate]PHP通过引用:理解[重复]
【发布时间】: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
?>

【问题讨论】:

    标签: php reference


    【解决方案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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-11
      • 2011-09-18
      • 2011-03-19
      • 1970-01-01
      • 2012-12-11
      • 2022-11-26
      • 2016-12-10
      相关资源
      最近更新 更多