getData( 'name')とgetName()の違いは何ですか


7

私はmagento 1.8を使用しています

そして、私は以下の方法を使用すると問題に直面しています

$product->getData('name');

$product->getName();

それらは同じですか、それらは同じ値を返すと確信しています[answer]。使用しているときにエラーが発生する

Fatal error: Call to a member function getData() on a non-object in

これらの2つの関数の正確な違いを知っているかもしれません。

ありがとうございました、

回答:


11

それらは同じ場合もあれば、異なる場合もあります。使用しているオブジェクトによって異なります。

あなたはインスタンス化クラスはメソッドが含まれている場合getName()、あなたから得る結果getNameとはgetData('name')異なる場合があります。
クラスが拡張されVarien_Objectておらず、メソッドがない場合でも、エラーが発生する可能性がありますgetData

Varien_Objectメソッドを拡張し、含まないクラスの場合getName()、2つのメソッドの結果は同じです。特定のメソッドが存在しない場合に呼び出される
Varien_Objectメソッド__callを実装します。 コードがどのように見えるかはこちらをご覧ください

だから、基本的に任意のメソッドの呼び出しにマッピングgetSomethingHere()するがgetData('something_here')。それはで始まる「偽」の方法で同じ働きsethasそしてuns

詳細はこちらをご覧ください。


@Mariusの説明をよろしくお願いします。賛成票を差し上げます
Amit Bera

@AmitBera。ありがとう。私の側からも同じです。
マリウス

4

getData():

ほとんどの場合、これは使用する方法です。2つのオプションのうち、この方が実際には高速で効率的です。出力を変更する必要がなく、値を表示するだけの場合は、getData()を使用します。ただし、商品価格など、getData()で適切に機能しない属性があります。まだテストしていませんが、getData( 'name')はgetName()とは異なる結果を生成する可能性があります。

getAttributeName()

データの表示/フォーマット方法に機能を追加するためにブロック内のメソッドをオーバーライドする必要がある場合にのみ、このメソッドを実際に使用する必要があります。このメソッドを使用する場合、Magentoはデータのレンダリングに追加の手順を実行する必要があるため、getData()を使用してデータを表示するよりも処理が少し遅くなります。したがって、$ _ product-> getName()を使用することで、たとえば、データが出力される前にデータを変更する関数を製品ビューブロックに追加できます。

一部の詳細:https : //stackoverflow.com/questions/3541273/magento-getsku-or-getdata-sku-returns-empty-string


1
他の誰かがいつ上書きしたいかわからないため、私は常に2番目の方法を使用します。共同作業の重要な部分です。
clockworkgeek

私の回答を編集してください
Amit Bera

私は自分の意見を追加するだけだったので、答えを変える必要はないと思います。
clockworkgeek
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.