質問

次のすべての方法はMagento Coreで使用されているので、どちらが優先される(または最新の「ベストプラクティス」)方法ですか?

  • Mage::throwException('Some Message') - 732の使用
  • throw new Exception('Some Message') - 419使用法
  • throw Mage::exception('Vendor_Module', 'Some Message') - 94の使用法
    (aを作成する必要があります Vendor_Module_Exception クラス)
役に立ちましたか?

解決

呼び出し Mage::throwException 特定の例外をスローするために使用されます Mage_Core_Exception バラエティ。これらは通常、エンドユーザーにエラーメッセージを提示するために使用されます。この例については、簡単に検索してください Mage::throwException mage_checkoutモジュールでは、最終的にセッションオブジェクトに追加され、結果のページでユーザーに表示されるため、エラーメッセージが実際に翻訳されている多くのインスタンスが実際に翻訳されています。

使用 new Exception または何かのような new My_Custom_Exception 通常、アプリケーションの内部エラーをスローしている場所、エンドユーザーに表示されるべきではないエラーがあります。たぶん、これらをキャッチして優雅に処理します(場合によってはカスタム例外タイプに適しています)。

私は個人的に使用したことがありません Mage::exception しかし、各モジュールに一意の例外タイプを持つことをパターン化する試みのようです。それを使用する際に害はありません。これは、基本的に特定のモジュールの例外インスタンスを返す工場であるためですが、(この執筆時点では)オーバーライドなどのサポートを実装していません。

他のヒント

あなたは難しい部分をやって、それらがどれくらいの頻度で使用されるかを見つけました:)

tl; dr: 私見、あなたは使用する必要があります Mage::throwException ほとんどの場合、倒れます Mage::exception セッションメッセージング機能と入力する必要がないという事実以外の理由で、モジュールの範囲の外側から例外タイプを上げる必要がある場合 throw new その前に。

これが内訳です:

  • Mage::throwException 本質的にラッパーです Mage_Core_Exception($message) セッションに例外を追加できるという追加の機能により getSingleton でチェーンを呼び出します addMessage
  • new Exception() 例外をスローするコアPHPの方法ですが、使用する必要があります throw キーワードは、おそらく他の2つが追加の機能を備えたラッパーであるため、おそらくわずかな大きな「パフォーマンス」です。
  • 述べたように、 Mage::exception ラッパーでもありますが、独自の例外クラスをインスタンス化できるようにするという利点があります。これは 本当に役に立ちます あなたがプラグイン開発者であり、例外のためにカスタムログを作成する必要がある場合、別々に、 logException (例:スタックTracなし)または例外でAPI呼び出しを行いたいなどを提供します。 throw たとえば、異なるクラスタイプの例外、 Mage_Paypal, 、頻繁に上昇します Mage_Core 例外タイプ。
ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top