2011-04-01 44 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); 
    } 
相关问题