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

Why are variables not changed and objects are after assignment in a function?

我发现一个普通的变量 $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)

对象通过引用传递和赋值。

因此,当您更改 'parameter' 变量时,您也会更改它的原始值。
这不会发生在其他参数类型(字符串、整数、数组)上,但只会发生在对象上。

有关详细信息,请阅读 References and Objects

此外,我认为您的 f($e,$g) 中有错字:不应该是 $g = 2 吗?

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

$b = clone $var;

因为:

$b = $var;

结果是一样的。 $b 仍将指向 $var 并且 $b 上的所有更改将反映在 $var;