将变量设置为 php 中对象的实例
Setting variable to an instance of an object in php
好吧,我在这里扯头发...
我显然遗漏了一些简单的东西。我试图防止数据库命中,所以我使用一个简单的函数来检查内存中是否已经存在该对象的实例,如果是,returns 实例,如果没有,则继续从数据库中获取。
private function RetrieveFromMemory($Id, $Object)
{
$mymap=$this->ColumnMap;
$key = $this->Key;
foreach($this->InMemory as $v) {
if($v->$key == $Id) {
/*
foreach (get_object_vars($v) as $key => $value) {
$Object->$key = $value;
}
*/
$Object = $v;
trace('Retrieved '.get_class($v).' from memory');
return true;
}
}
return false;
}
如果我取消对 foreach 的注释,我可以很好地填充属性,但它是一个新实例。我想要相同的事物实例,但使用 $Object = $v;
不会将 $Object
设置为与 $v
相同的实例...它只保留原始的空对象。
您返回的是 true
,而不是 $v
。
您正试图在函数内更改参数 $Object
的值,并希望该更改在函数完成后可见。
PHP 默认情况下 按值 传递参数,因此您要么需要
- 将函数更改为 return 它找到的值,并更改调用方式;或者
- 告诉PHP通过引用传递参数:
function RetrieveFromMemory($Id, &$Object)
好吧,我在这里扯头发...
我显然遗漏了一些简单的东西。我试图防止数据库命中,所以我使用一个简单的函数来检查内存中是否已经存在该对象的实例,如果是,returns 实例,如果没有,则继续从数据库中获取。
private function RetrieveFromMemory($Id, $Object)
{
$mymap=$this->ColumnMap;
$key = $this->Key;
foreach($this->InMemory as $v) {
if($v->$key == $Id) {
/*
foreach (get_object_vars($v) as $key => $value) {
$Object->$key = $value;
}
*/
$Object = $v;
trace('Retrieved '.get_class($v).' from memory');
return true;
}
}
return false;
}
如果我取消对 foreach 的注释,我可以很好地填充属性,但它是一个新实例。我想要相同的事物实例,但使用 $Object = $v;
不会将 $Object
设置为与 $v
相同的实例...它只保留原始的空对象。
您返回的是 true
,而不是 $v
。
您正试图在函数内更改参数 $Object
的值,并希望该更改在函数完成后可见。
PHP 默认情况下 按值 传递参数,因此您要么需要
- 将函数更改为 return 它找到的值,并更改调用方式;或者
- 告诉PHP通过引用传递参数:
function RetrieveFromMemory($Id, &$Object)