2

我是 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();

所以我想我有几个问题。

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

我的理论是,有一些我不理解的继承或设计模式实现正在进行,也许有人可以为我解释一下。

4

1 回答 1

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());

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

var_dump($attributeSet->getData());

但要小心转储这些,因为如果有一个具有循环引用的数据对象并且您没有使用 xDebug 之类的东西,那么 PHP 将适合尝试显示该对象。

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

$object->getFooBazBar();

该方法getFooBazBar被转换为数据属性foo_baz_bar。然后getData使用此属性调用。了解情况有点棘手,但是一旦了解,您就会开始了解使用这种模式可以节省多少时间。

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

于 2012-10-07T18:15:02.597 回答