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

时间:2015-02-05 03:34:07

标签: php oop reference instances

好的,我在这里撕开我的头发......

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

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相同的实例...它只是保留原始的空对象。

2 个答案:

答案 0 :(得分:2)

您正在尝试更改函数内参数$Object的值,并希望在函数完成后可以看到更改。

默认情况下,PHP按值传递参数,因此您需要

  1. 将功能更改为返回找到的值,并更改您的调用方式;或
  2. 告诉PHP通过引用传递参数:function RetrieveFromMemory($Id, &$Object)

答案 1 :(得分:0)

您将返回true,而不是$v