首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP变量是通过值传递还是通过引用传递?

PHP变量是通过值传递还是通过引用传递?
EN

Stack Overflow用户
提问于 2008-08-03 22:51:41
回答 13查看 199.2K关注 0票数 291

PHP变量是通过值传递还是通过引用传递?

EN

回答 13

Stack Overflow用户

发布于 2012-03-14 14:09:48

在PHP中,默认情况下,对象作为对新对象的引用传递。

请参阅此示例:

代码语言:javascript
复制
class X {
  var $abc = 10; 
}

class Y {

  var $abc = 20; 
  function changeValue($obj)
  {
   $obj->abc = 30;
  }
}

$x = new X();
$y = new Y();

echo $x->abc; //outputs 10
$y->changeValue($x);
echo $x->abc; //outputs 30

现在看看这个:

代码语言:javascript
复制
class X {
  var $abc = 10; 
}

class Y {

  var $abc = 20; 
  function changeValue($obj)
  {
    $obj = new Y();
  }
}

$x = new X();
$y = new Y();

echo $x->abc; //outputs 10
$y->changeValue($x);
echo $x->abc; //outputs 10 not 20 same as java does.

现在看看这个:

代码语言:javascript
复制
class X {
  var $abc = 10; 
}

class Y {

  var $abc = 20; 
  function changeValue(&$obj)
  {
    $obj = new Y();
  }
}

$x = new X();
$y = new Y();

echo $x->abc; //outputs 10
$y->changeValue($x);
echo $x->abc; //outputs 20 not possible in java.

我希望你能理解这一点。

票数 89
EN

Stack Overflow用户

发布于 2008-08-11 02:09:30

似乎很多人对对象传递给函数的方式以及通过引用传递的含义感到困惑。对象仍然是通过值传递的,只是在PHP5中传递的值是一个引用句柄。作为证据:

代码语言:javascript
复制
<?php
class Holder {
    private $value;

    public function __construct($value) {
        $this->value = $value;
    }

    public function getValue() {
        return $this->value;
    }
}

function swap($x, $y) {
    $tmp = $x;
    $x = $y;
    $y = $tmp;
}

$a = new Holder('a');
$b = new Holder('b');
swap($a, $b);

echo $a->getValue() . ", " . $b->getValue() . "\n";

输出:

代码语言:javascript
复制
a, b

pass by reference意味着我们可以修改调用者看到的变量,而上面的代码显然做不到这一点。我们需要将交换函数更改为:

代码语言:javascript
复制
<?php
function swap(&$x, &$y) {
    $tmp = $x;
    $x = $y;
    $y = $tmp;
}

$a = new Holder('a');
$b = new Holder('b');
swap($a, $b);

echo $a->getValue() . ", " . $b->getValue() . "\n";

输出:

代码语言:javascript
复制
b, a

以便通过引用传递。

票数 62
EN

Stack Overflow用户

发布于 2014-12-21 17:27:03

您可以通过引用将变量传递给函数。此函数将能够修改原始变量。

您可以在函数定义中通过引用来定义段落:

代码语言:javascript
复制
<?php
function changeValue(&$var)
{
    $var++;
}

$result=5;
changeValue($result);

echo $result; // $result is 6 here
?>
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档