浏览Magento文档时遇到问题

Ste*_*rek 2 phpdoc magento

我是Magento的新手,文档,主要是phpDocs,很难导航.例如,

$attributeSet = Mage::getModel('eav/entity_attribute_set')->load($id);
Run Code Online (Sandbox Code Playgroud)

类Mage_Eav_Model_Entity_Attribute_Set的php文档中, 没有在继承的方法或其他方面提及方法getAttributeSetName(),但这仍然有效.

$attributeSet = Mage::getModel('eav/entity_attribute_set')->load($id);
echo $attributeSet->getAttributeSetName();
Run Code Online (Sandbox Code Playgroud)

所以我想我有几个问题.

  1. 有人可以向我解释为什么文档是这样的吗?
  2. 哪里可以找到phpDocs中神秘的getAttributeSetName()方法?

我的理论是,有一些继承或设计模式的实施,我不理解,也许有人可以为我阐明这一点.

Ala*_*orm 6

如果你真的想要炒你的大脑,看看源代码,Mage_Eav_Model_Entity_Attribute_Set并一直追随继承链.您将找不到getAttributeSetName任何地方定义的方法.

从中继承的所有Magento对象都Varien_Object可以在其上设置任意数据成员.试试这个.

$attributeSet = Mage::getModel('eav/entity_attribute_set')->load($id);
$attributeSet->setFooBazBar('Value');
var_dump($attributeSet->getFooBazBar());
var_dump($attributeSet->getData('foo_baz_bar'));
var_dump($attributeSet->setData('foo_baz_bar','New Value'));
var_dump($attributeSet->getFooBazBar());
Run Code Online (Sandbox Code Playgroud)

您还可以使用获取所有数据成员

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

但要小心转储这些,因为如果有一个数据对象有一个循环引用而你没有使用xDebug之类的东西,那么PHP将试图显示该对象.

Magento将数据属性存储在特殊的_data数组属性中.您可以使用getData和来获取/设置此数组中的值setData.Magento还实现了魔法获取和设置方法,所以当你说出类似的东西时

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

该方法getFooBazBar转换为data属性foo_baz_bar.然后getData使用此属性调用.让你的头脑变得有点棘手,但一旦你得到它,你将开始看到你可以使用这种模式节省多少时间.

当然,这样做的一个副作用是,不可能通过查看它的类文件来推断任何对象可能具有的数据属性,因此这些方法没有phpDocs.