为什么变量没有改变而对象在函数中赋值之后?
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
;
上
我发现一个普通的变量 $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
;