如何学习某些对象可以访问的方法?

时间:2011-04-01 18:42:59

标签: magento

我有以下代码:

$_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核心的控制器中。我有商业错误,我已经厌倦了看:http://docs.magentocommerce.com/ 但我发现自己有时会迷失方向。

有没有人知道这方面的好教程,还是可以指导我解决这个问题?

3 个答案:

答案 0 :(得分:21)

首先,在模型和块中,任何getset 的方法实际上都是一种从对象的_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错误的Class/URI Lookup选项卡快速查看定义类的文件,以查看方法定义。请记住,一些方法将在祖先类中定义。花时间学习IDE或a program like ctags非常值得投资,广告他们会让你快速跳到单个类定义。

答案 1 :(得分:4)

以下是查找类文件的简单方向: -

<强> 1。集合

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

上面的代码意味着我们正在调用产品集合类。类文件可以在: -

中找到
  

应用\代码\核心\法师\目录\模型\资源\ Eav下\ Mysql4 \产品\ 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')

对于上面的代码,类文件是: -

  

应用\代码\核心\法师\目录\模型\ Product.php

第3。辅助

对于帮助文件,

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

上面的帮助文件是: -

  

应用\代码\核心\法师\目录\助手\ Output.php

<强> 4。最后

最后,使用像Eclipse或Netbeans这样的IDE将帮助您快速有效地学习和编写代码。

答案 2 :(得分: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);   
    }