为什么变量没有改变,对象在函数中赋值后?

时间:2015-10-20 10:43:34

标签: php

我发现在函数中无法更改常见变量$g;但是对象$e可以。为什么?

<?php
class e {
    public $var1 = 1;
}

function f($e,$g) {
    $e->var1 = 2;
    $f = 2;
}

$e = new e;
$g = 1;

var_dump($e->var1);
var_dump($g);

f($e,$g);

var_dump($e->var1);
var_dump($g);

结果:

int(1)
int(1)
int(2)
int(1)

1 个答案:

答案 0 :(得分:2)

传递对象并通过引用分配。

因此,当您更改'参数'变量时,您也会更改其原始值 其他参数类型(字符串,整数,数组)不会发生这种情况,但只能使用对象。

有关详情,请参阅References and Objects

另外,我相信你的f($e,$g)中有一个拼写错误:不应该是$g = 2吗?

如果您需要篡改对象但仍保留其原始值的副本,请执行clone

$b = clone $var;

becase的:

$b = $var;

会导致同样的事情。 $b仍会指向$var$b上的所有更改都会反映在$var上;