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

Chr*_*ris 7 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
Run Code Online (Sandbox Code Playgroud)

我想学习如何发现我可以在对象上使用的方法.

例如$ _product-> getProductUrl()使用方法getProductUrl()来获取url,但我需要价格并且不知道调用它的方法.使用print_r并没有为我提供足够的信息来发现它们是什么.我认为它们位于MAGE核心的控制器中.我有商业错误,我已经厌倦了看:http://docs.magentocommerce.com/ 但我发现自己有时会丢失.

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

Ala*_*orm 22

首先,在模型和块中,任何带有get或者实际上set 可能是从对象的_data数组中拉出的魔法的方法.您可以在此对象中查看所有数据

var_dump($object->getData());
Run Code Online (Sandbox Code Playgroud)

因此,如果此数组具有名为的键some_data,则可以调用名为的方法getSomeData

echo $object->getSomeData();
Run Code Online (Sandbox Code Playgroud)

但请记住,某些方法将具有以和开头的实际方法,因此请始终检查类定义. getset

其次,您可以使用PHP反射函数(或更完整但复杂的PHP反射类API)来查看对象是什么类,然后获取该类的方法列表

首先,使用get_class获取对象类的名称.

$class_name = get_class($object);
Run Code Online (Sandbox Code Playgroud)

然后,传递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);
}
Run Code Online (Sandbox Code Playgroud)

这将为您提供所有类方法的列表.然后,您可以使用Commercebug错误的Class/URI Lookup选项卡快速查看定义类的文件,以查看方法定义.请记住,一些方法将在祖先类中定义.花时间学习IDE或像ctags这样的程序非常值得投资,广告他们会让你快速跳到单个类定义.

  • +1用于学习使用合适的IDE(我更喜欢Netbeans),它将帮助你理解Magento的OO设计比在"哑"文本编辑器中进行无限制的更快,**尤其是**与xdebug的实时调试相结合. (2认同)