PHP变量是通过值传递还是通过引用传递?
发布于 2012-03-14 14:09:48
在PHP中,默认情况下,对象作为对新对象的引用传递。
请参阅此示例:
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
现在看看这个:
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.
现在看看这个:
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.
我希望你能理解这一点。
发布于 2008-08-11 02:09:30
似乎很多人对对象传递给函数的方式以及通过引用传递的含义感到困惑。对象仍然是通过值传递的,只是在PHP5中传递的值是一个引用句柄。作为证据:
<?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";
输出:
a, b
pass by reference意味着我们可以修改调用者看到的变量,而上面的代码显然做不到这一点。我们需要将交换函数更改为:
<?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";
输出:
b, a
以便通过引用传递。
发布于 2014-12-21 17:27:03
您可以通过引用将变量传递给函数。此函数将能够修改原始变量。
您可以在函数定义中通过引用来定义段落:
<?php
function changeValue(&$var)
{
$var++;
}
$result=5;
changeValue($result);
echo $result; // $result is 6 here
?>
https://stackoverflow.com/questions/879
复制相似问题