在PHP

2015-02-05 56 views
0

好變量設置爲一個對象的實例,我撕我的頭髮在這裏...在PHP

我清楚的很簡單的東西。我試圖阻止數據庫命中,所以我正在使用一個簡單的函數來檢查是否有已經在內存中的對象的實例,如果是,則返回該實例,如果沒有,則從數據庫。

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

您正在嘗試更改函數內參數$Object的值,並希望在該函數完成後該更改可見。

PHP傳遞參數按值默認情況下,讓你無論是需要

  1. 更改功能發現它的價值,並改變你怎麼稱呼它;或
  2. 告訴PHP按引用傳遞參數:function RetrieveFromMemory($Id, &$Object)
+0

想通了這一點後,我問...以供將來參考http://php.net/manual/en/language.oop5.references.php# 95522是一個很好的指導,雖然它並沒有顯示出一個令人遺憾的例子 – ChaosAffe

0

您要返回true而不是$v