2012-09-29 115 views
0

我對這裏發生的事情有點困惑,它在我看來像一種方法正在調用自己?我正在嘗試瞭解Magento的模型。我正在從幫助器(目錄/類別)返回工作,並且接到對此方法「GetCategories」的調用。我不知道這裏發生了什麼事。如果有人能夠闡明這個代碼片段,我非常感謝它。getCategories方法調用自己?

getCategories ($parent, 
      $recursionLevel = 0, 
      $sorted = false, 
      $asCollection = false, 
      $toLoad = true  
      ){ 
        $categories = $this->getResource() 
        ->getCategories($parent, $recursionLevel, $sorted, $asCollection, $toLoad); 
        return $categories; 
        } 
+1

請儘量熟悉這個網站的編輯工具。還有其他正確縮進的代碼(我沒有爲你做),因爲其他人需要閱讀它。此網站使用空格縮進,製表符不能很好地工作。 – hakre

+0

@MageNewbie - 查找「遞歸」。自我調用的方法和函數在計算機編程中有着悠久而豐富的歷史。 –

回答

0

很難說您發佈的代碼。即使這兩種方法共享相同的名稱(getCategories),但這並不意味着它們屬於同一個類或甚至是對象。

如果你想了解你會需要比較:

var_dump($this === $this->getResource()); 

除此之外,它也是規劃遞歸常見的方法調用自身,因此遞歸。然而,對於那塊代碼,它會跑到牆上。

所以從技術上講,我會做的假設,在你的例子中這是而不是完全相同的對象方法。

請注意,這個答案是獨立於Magento的,這是PHP是如何工作的一般。

1

@ hakra的答案並不多。只是Magento特定邏輯的一部分。 因此,爲了與你應該知道的Magento模型工作,即Magento的有2種模式:正常模式和資源模型(我們可以稱之爲分配塊的型號太多,作爲一個視圖模型 - 但更連接到V MVC的一部分)。

資源模型創建爲僅包含DB相關邏輯的DB適配器,並且通常連接到某個數據庫表,因此包含該表的CRUD操作的邏輯。所以,你會看到水木清華這樣的規律 - 在簡單someMethod是正常的模型的一部分,但由於它包含DB-相關的邏輯,該方法的所有執行被移到了資源模型,所以someMethod身體在常規模式將類似的東西:

public function someMethod($args) 
{ 
    return $this->getResource()->someMethod($args); 
} 
+0

謝謝,這使得事情變得相當多:)。 – MageNewbie