6

私はしばらくの間マジェントを使用してきましたが、魔法のゲッターと getData() のどちらを使用するかを常に決めることはできません

わずかなパフォーマンスのオーバーヘッドを除いて、誰かが主な違いを説明できますか (そして、それは非常にわずかでなければなりません)。

私は次のように考えています:

  1. 将来のコードプルーフ (magento 2 はマジックゲッターを使用しないと思います)
  2. 様式的に
  3. パフォーマンス
  4. 安定
  5. 他の理由よりも 1 を使用するその他の理由

両方の混合物を使用するため、コアコードに基づいて進む明確な方法はありません

4

3 に答える 3

10

すべての状況に適合する 1 つの答えはありません。使用しているモデルと特定のユース ケースに基づいて決定することをお勧めします。

マジック メソッドのパフォーマンスは非常に低く、各アクセサーで CamelCase から under_score に変換する余分なオーバーヘッドも発生します。

とにかく、魔法のメソッドは基本的に getData() のラッパーであり、余分なオーバーヘッドがあります。

ただし、魔法のメソッドを使用する利点が 1 つあります。次に例を示します。

getData('attribute_name') ではなく getAttributeName() を使用する場合

将来のある時点で、モデルが更新されて実際の具体的な getAttributeName() メソッドが含まれるようになる可能性があります。その場合、コードは引き続き正常に動作します。ただし、getData() を使用した場合は、属性に直接アクセスし、新しいメソッドをバイパスします。これには、バイパスしているいくつかの重要な計算が含まれる可能性があります。

于 2013-01-22T11:58:48.747 に答える
3

私の意見では、最も安全な方法は常に使用することgetData($key)です。マジックゲッターは、すでに指摘したのと同じ方法を使用します。利点は、コード内の getData へのすべての参照を見つけて、getData()メソッドがリファクタリングされた場合に適切に変更できることです。それを、常に異なる名前が付けられているすべてのマジックメソッド呼び出しを見つけなければならないことと比較してください。2 つ目は、同じ方法で名前が付けられたメソッドがある場合、魔法のゲッターが簡単に失敗する可能性があることです (getName() で一度取得したことがあり、デバッグにかなりの時間がかかったと思います)。したがって、私の投票は間違いなく使用することgetData()です。

于 2013-01-21T14:20:59.370 に答える
0

前に述べたようにgetData、魔法のメソッドを使用するのが最善です。2つの簡単なポイントを追加したかっただけです:

_underscore1) 特にVarien_Objectの実装により (Andrew が述べたように)、パフォーマンスのオーバーヘッドはそれほど小さくありません。

2) getData の実装には、コードを「きれいにする」のに役立ついくつかのロジックがあり、通常の getData 呼び出しよりは少し遅くなりますが、魔法のメソッドよりもはるかに高速です。

をネストVarien_Objectして、次のような呼び出しを実行する必要がある場合:

$firstObject->getData('second_object')->getData('third_object')->getData('some_string');

次のようにその呼び出しを実行することもできます。

$firstObject->getData('second_object/third_object/some_string');
于 2014-05-05T18:50:57.147 に答える