我真的被php中的引用困住了。在我的程序中,我有类似的东西:
PROGRAMM
class Test
{
private $_property;
function __construct($property)
{
$this->_property = $property;
}
public function setProperty($property)
{
$this->_property = $property;
}
public function getProperty()
{
return $this->_property;
}
}
function doSmth(Test $var)
{
$newVar = new Test('test');
//I need to do something here...
}
$var = new Test('original');
doSmth($var);
var_dump($var);
问题
如何将$newVar
变量的所有内容复制到我的$var
变量,以便在使用函数{{1}之外的var_dump()
函数后能够看到它1}}。而且我不能在我的程序中使用getter和setter因为我有很多它们而且会有很多代码。有可能用我的限制来解决这个问题吗?
更新:我无法在我的函数doSmth()
中返回值,我也尝试了doSmth()
但没有任何效果。有人可以告诉我如何使用__clone
进行操作?
答案 0 :(得分:4)
可以使用 clone 关键字创建对象副本。它将帮助您创建源对象的完整副本。或者,我认为也可能对您有用,您可以尝试通过引用传递Test对象:
function doSmth(Test &$var)
{
// Here you can do something with your var
}
答案 1 :(得分:2)
$newVar
仅存在于函数的上下文中。
您要做的是创建一个这样的返回值:
function doSmth(Test $var)
{
$newVar = new Test('test');
//I need to do something here...
return $newVar;
}
并改为调用这个函数:
$myNewShinyVar=doSmth($var);
这样,您的函数返回类Test
的对象作为返回值。
var_dump($myNewShinyVar);
编辑:如果您无法返回值,则可以通过引用传递:
function doSmth(&$var)
{
$var = new Test('test');
}
这将修改作为参数传递给它的变量本身(而不是传递它的副本)
doSmth($var);
var_dump($var);
答案 2 :(得分:0)
如果我多次阅读你的问题,我认为这就是你所追求的:
function doSmth(Test $var)
{
$newvar = clone $var;
// do some stuff on a copy of $var, leaving $var intact
}
$var = new Test('original');
doSmth($var);
var_dump($var);