2011-04-01 68 views
6

我有以下代碼:如何學習某些對象可以訪問的方法?

$_productCollection = Mage::getResourceModel('catalog/product_collection') 
->addAttributeToSelect(array('name', 'price', 'small_image', 'status'), 'inner') 
->addCategoryFilter(Mage::getModel('catalog/category')->load($catid)); 
$_helper = $this->helper('catalog/output'); 
foreach ($_productCollection as $_product): 
    echo $_product->getProductUrl(); 
endforeach 

我想了解我是怎麼發現我可以在對象上使用的方法。

例如$ _product-> getProductUrl()使用方法getProductUrl()來獲取url,但是我需要價格並且不知道什麼方法會調用它。使用print_r不能提供足夠的信息讓我發現它們是什麼。我認爲他們在位於MAGE核心的控制器中。我有商業bug,我已經厭倦了看:http://docs.magentocommerce.com/ 但我發現自己迷失了時間。

有沒有人知道這個很好的教程,或可以給我的方向來弄清楚這一點?

回答

17

首先,在模型和塊,與get任何方法或set可以實際上是一個魔術方法這是一個從該對象的_data陣列中拔出。你可以看到所有的數據對象這樣

var_dump($object->getData()); 

因此,如果這個數組有一個鍵名爲some_data,你可以調用一個名爲getSomeData

echo $object->getSomeData(); 

記住,雖然方法,有些方法將有實際的getset開頭的方法,因此請始終檢查類定義。

其次,你可以使用PHP反射功能(或更完整而複雜的PHP反射類API),看看什麼是對象類,然後得到那個類的方法列表

首先,使用get_class獲取對象類的名稱。

$class_name = get_class($object); 

然後,傳遞get_class_methods獲取對象

$class_name = get_class($object); 
$methods = get_class_methods($class_name); 
echo "Methods for class $class_name \n<br />\n"; 
foreach($methods as $method) 
{ 
    var_dump($method); 
} 

這會給你的所有的類方法的列表上的所有可調用的方法列表。然後,您可以使用Commercebug bug的Class/URI Lookup選項卡快速調入定義類的文件,以查看方法定義。請記住,一些方法將在祖先類中定義。投入時間學習IDE或a program like ctags非常值得投資,他們會讓你快速跳到個人課堂定義。

+2

+1學習使用適當的IDE(我喜歡Netbeans的),它會幫助你理解的Magento的面向對象的設計無限的速度比在「啞巴」黑客各地文本編輯器,尤其是**與xdebug實時調試結合使用時。 – 2011-04-01 22:31:54

+0

對於IDE來說,Magento的深層對象層次結構通過打印輸出導航類繼承是一個不盡人意的任務。如果你在一個Magento項目,那麼你真的在Zend Framework上,所以Zend_Debug :: dump($ object-> getData());也是[你的朋友](http://framework.zend.com/manual/en/zend.debug.dumping.html)。 – benz001 2011-04-02 06:31:04

+1

你可以print_r(get_class_methods($ object)) – 2011-04-02 18:47:27

4

下面是一個簡單的方向找到的類文件: -

1.收集

$_productCollection = Mage::getResourceModel('catalog/product_collection') 

上面的代碼意味着我們呼籲該產品集合類。該類文件可在以下位置找到: -

app \ code \ core \ Mage \ Catalog \ Model \ Resource \ Eav \ Mysql4 \ Product \ Collection。PHP

在Collection.php你會發現下面的類: -

class Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection 
    extends Mage_Catalog_Model_Resource_Eav_Mysql4_Collection_Abstract 

所以,你需要的功能可以在Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Collection類。

如果它不存在話,就可以在父類中,即Mage_Catalog_Model_Resource_Eav_Mysql4_Collection_Abstract

2.型號

同樣,

$_product = Mage::getModel('catalog/product') 

對於上面的代碼中,類文件是: -

app \ code \ core \ Mage \ Catalog \ Model \ Pro duct.php

3.助手

對於輔助文件,

$_helper = $this->helper('catalog/output'); 

上述輔助文件是: -

應用\代碼\核心\法師\ Catalog \ Helper \ Output.php

4.最後

最後,使用像Eclipse或Netbeans的一個IDE會幫助你學習,快速,高效地編寫代碼。

0

我是一個總新手,但我用這個頁面上的信息來獲取所有可用的方法給我的某個對象,並將它們發送到日誌。

例如,category_collection:

$collection = Mage::getResourceModel('catalog/category_collection'); 


    Mage::log(
      "Methods for class ".get_class($collection)." ".print_r(get_class_methods($menu),true), 
      null, 
      'log_name.log' 
      ); 

    $parent = get_parent_class($collection); 

    while ($parent) { 
     Mage::log(
      "Methods for parent ".$parent." ".print_r(get_class_methods($parent),true), 
      null, 
      'log_name.log' 
      ); 
      $parent = get_parent_class($parent); 
    } 
相關問題