Magentoで例外を投げる好みの方法は何ですか?
-
16-10-2019 - |
質問
次のすべての方法は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
例外タイプ。