我发现在函数中无法更改常见变量$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)
答案 0 :(得分:2)
传递对象并通过引用分配。
因此,当您更改'参数'变量时,您也会更改其原始值 其他参数类型(字符串,整数,数组)不会发生这种情况,但只能使用对象。
有关详情,请参阅References and Objects
另外,我相信你的f($e,$g)
中有一个拼写错误:不应该是$g = 2
吗?
如果您需要篡改对象但仍保留其原始值的副本,请执行clone
:
$b = clone $var;
becase的:
$b = $var;
会导致同样的事情。 $b
仍会指向$var
,$b
上的所有更改都会反映在$var
上;