2

私は Magento を初めて使用し、ドキュメント (主に phpDocs) をナビゲートするのが困難です。例えば、

$attributeSet = Mage::getModel('eav/entity_attribute_set')->load($id);

クラス Mage_Eav_Model_Entity_Attribute_Setの php doc に は、継承されたメソッドまたはそれ以外のメソッド getAttributeSetName() についての言及はありませんが、これは機能します。

$attributeSet = Mage::getModel('eav/entity_attribute_set')->load($id);
echo $attributeSet->getAttributeSetName();

ですから、いくつか質問があると思います。

  1. ドキュメントがこのようになっている理由を誰かに説明してもらえますか?
  2. 謎の getAttributeSetName() メソッドは phpDocs のどこにありますか?

私の理論は、私が理解していないいくつかの継承またはデザインパターンの実装が進行中であるということです.誰かが私のためにこれに光を当てることができるかもしれません.

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は data プロパティに変換されますfoo_baz_bar。そして、getDataこのプロパティを使用して呼び出されます。理解するのは少し難しいですが、理解すれば、このパターンを使用してどれだけの時間を節約できるかがわかります。

これの副作用の 1 つは、もちろん、オブジェクトのクラス ファイルを見て、オブジェクトが持つ可能性のあるデータ プロパティを推測することが不可能であるため、これらのメソッドの phpDocs が存在しないことです。

于 2012-10-07T18:15:02.597 に答える