我是Magento的新手,文档(主要是phpDocs)很难导航。例如,
$attributeSet = Mage::getModel('eav/entity_attribute_set')->load($id);
在Class Mage_Eav_Model_Entity_Attribute_Set的php文档中,没有在继承的方法或其他方面提及方法getAttributeSetName(),但这仍然有用。
$attributeSet = Mage::getModel('eav/entity_attribute_set')->load($id);
echo $attributeSet->getAttributeSetName();
所以我想我有几个问题。
我的理论是有一些继承或设计模式的实施,我不理解,也许有人可以为我阐明这一点。
答案 0 :(得分:6)
如果你真的想要炒你的大脑,请查看Mage_Eav_Model_Entity_Attribute_Set
的源代码并一直遵循继承链。您不会在任何地方找到getAttributeSetName
方法。
从Varien_Object
继承的所有Magento对象都可以在其上设置任意数据成员。试试这个。
$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());
您还可以使用
获取所有数据成员var_dump($attributeSet->getData());
但要小心转储这些,因为如果有一个数据对象有一个循环引用而你没有使用像xDebug这样的东西,那么PHP将试图显示该对象。
Magento将数据属性存储在特殊的_data
数组属性中。您可以使用getData
和setData
在此数组中获取/设置值。 Magento还实现了魔法获取和设置方法,所以当你说出像
$object->getFooBazBar();
方法getFooBazBar
将转换为数据属性foo_baz_bar
。然后使用此属性调用getData
。让你的头脑变得有点棘手,但是一旦你得到它,你将开始看到你可以使用这种模式节省多少时间。
这样做的一个副作用当然是,通过查看它的类文件来推断任何对象可能具有的数据属性是不可能的,因此这些方法没有phpDocs。