在php中将变量设置为对象的实例

在php中将变量设置为对象的实例,php,oop,reference,instances,Php,Oop,Reference,Instances,好吧,我在这里扯头发 我显然错过了一些简单的东西。我试图阻止数据库命中,所以我使用了一个简单的函数来检查内存中是否存在对象的instance,如果存在,则返回实例,如果没有,则从数据库中获取它 private function RetrieveFromMemory($Id, $Object) { $mymap=$this->ColumnMap; $key = $this->Key; foreach($this->InMemory as $v) {

好吧,我在这里扯头发

我显然错过了一些简单的东西。我试图阻止数据库命中,所以我使用了一个简单的函数来检查内存中是否存在对象的instance,如果存在,则返回实例,如果没有,则从数据库中获取它

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按值传递参数,因此您需要

  • 更改函数以返回它找到的值,并更改调用它的方式;或
  • 告诉PHP通过引用传递参数:
    函数RetrieveFromMemory($Id,&$Object)

  • 在我问过你之后我发现。。。供将来参考是一个很好的指南,尽管它没有显示使用函数的示例