Поскольку в PHP 5 ссылки на объекты передаются по значению, а не самим объектам. Это означает, что аргумент вашей функции $var
и переменная вызывающей области действия $obj
являются различными ссылками на один и тот же объект. Эта ручная запись может вам помочь.
Чтобы получить (мелкую) копию вашего объекта, используйте clone
. Однако для получения этой копии вам необходимо вернуть ее:
function edit($var)
{
$clone = clone $var;
$clone->test = "foo";
return $clone;
}
$obj = new stdClass;
$obj2 = edit($obj);
echo $obj2->test;
Или присвойте его ссылочному аргументу , а затем назовите его так:
function edit($var, &$clone)
{
$clone = clone $var;
$clone->test = "foo";
}
$obj = new stdClass;
edit($obj, $obj2);
echo $obj2->test;