質問 > その他 > 共通クラス内で「フロント機能」 or 「管理機能」の判定 |
その他
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
seasoft |
投稿日時: 2009/9/7 19:27
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: 共通クラス内で「フロント機能」 or 「管理機能」の判定 既に、エラー処理内で判定している場所がありますね。
これよりは、 引用:
の方法の方がストレートかなと思っています。
|
ramrun |
投稿日時: 2009/5/9 14:05
対応状況: −−−
|
仙人 登録日: 2006/11/3 居住地: 投稿: 789 |
Re: 共通クラス内での「フロント機能」 or 「管理機能」判定 個人的な考えですが。
いろいろなやり方があって、どんなのがいいかという話がどんどんできたら面白いと思います。 最終的にどれを採用するとかもあると思いますが。 だからまた、どなかたの案で「こんなのどうよ?」っていうのがあったら見てみたいです。 私はproxyパターンとかいわれてもよくわからなかったので、いまさらながら ・ITpro:矢沢久雄の早わかりGoFデザインパターン とかみて、ちょっと感動しておりましたw ・Geekboy:PHPでAggregation。ROR ActiveRecordのCallbackロジックを真似てみる みたいなのもPHPで普通に使えたらいいのになぁと。 脱線してすみません。 |
seasoft |
投稿日時: 2009/5/9 10:54
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: 共通クラス内での「フロント機能」 or 「管理機能」判定 > 今回は, できるだけ既存の関数の挙動を変えないことを念頭にしたので引数の参照渡しにしていますが, 本来なら「結果」を返すためのクラスなので関数の返り値にしてしまった方がわかりやすそうです.
そうですね。最初に拝見したときから、返り値なら良さそうなのになぁと思っていました。 しかし、場合によっては、ステータスをリターンするのとあまり変わらないのかなとも思いました。 真価を発揮するのは、1コールで複数の処理をするような場合でしょうか? (たとえば、メール送信は成功したけど、履歴保存に失敗したなど。)
|
nanasess |
投稿日時: 2009/5/9 10:02
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2313 |
Re: 共通クラス内での「フロント機能」 or 「管理機能」判定 ramrun さん, 引用:
ありがとうございます. 全く動かしてなかったのがバレバレですね(汗) 修正しておきました. 引用:
良かったです! 引用:
後者の例だと, sendOrder() 関数を使おうとしている人が $result を渡しても, 内部で上書きされてしまい, 想定通りの挙動にならないと思います. 今回は, できるだけ既存の関数の挙動を変えないことを念頭にしたので引数の参照渡しにしていますが, 本来なら「結果」を返すためのクラスなので関数の返り値にしてしまった方がわかりやすそうです. phpDoc コメントも
と書けてコードの見通しも良くなりそうです. とり急ぎですが動作確認のお礼まで. ありがとうございました! |
ramrun |
投稿日時: 2009/5/9 9:35
対応状況: −−−
|
仙人 登録日: 2006/11/3 居住地: 投稿: 789 |
Re: 共通クラス内での「フロント機能」 or 「管理機能」判定 動作確認しました。
Helper_Mailがnot foundになるから「なんだよコノヤロー」とか思いましたが、その上のリスナーに対するコメント行が閉じてなかったのが原因でしたw こういうデザインパターン?の類は知らない(自分のレベル的に)ので非常に参考になります。 errorListenerがオーバーライドされていくのはカッコイイですね。 引用: はずしていたりして, 使えなかったらゴメンナサイ... ところでひとつ気になったんですが、
の$resultが参照で渡されていきますが、たとえば
はいいとして、
みたいなのはおかしいですよね? 変なことを聞いてるようでしたらごめんなさい(汗)。 |
nanasess |
投稿日時: 2009/5/8 22:47
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2313 |
Re: 共通クラス内での「フロント機能」 or 「管理機能」判定 レス遅くなりまして, 大変申し訳ないです.
コンパイル待ち状態だったので, ざくっと書いてみました. 大変申し訳ございませんが, 現在動作させる環境が無いので, このままでは動かないかもしれません... 後日ちゃんとテストしますので, イメージだけでもお伝えできたらと思います. 僕的には, PHP の error_handler も try/catch も使いにくくて嫌いなので, 結果セットや, エラーの内容を保持するクラスを作ってみました. できるだけ, 既存の処理に影響無く, 必要な関数のみに処理を加えることができるはず...
まず, 結果を保持するための基底クラスである LC_Results クラスを用意し, その中で正常な結果やエラー結果を保持するようにします. また, エラーの内容をカスタマイズするための Listener 関数を用意しておきます. 各 Helper クラスや, 各 Page クラスで固有のエラー処理をしたい場合は, LC_Results を継承したインナークラスを作って, errorListener() 関数をオーバーライドさせてやれば OK です. はずしていたりして, 使えなかったらゴメンナサイ... |
seasoft |
投稿日時: 2009/5/7 20:08
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: 共通クラス内での「フロント機能」 or 「管理機能」判定 > require_base.phpあたりでset_error_handlerして、LC_Pageでそれまでに捕まえたエラーをウンヌンするという考えでした。
その範囲に留めるのが良いような感じもしますね。それだけでも、ある程度のエラー(例外系)には対応できそうです。 現状ではテンプレートで JavaScript で Alert している、正常系(完了など)のメッセージあたりも統合できたら良いですね。 > 単にエラーになりそうな箇所をset_error_handlerとrestre_error_handlerでサンドイッチして、その間のエラーだけ収集したほうがいいかな。 私のスキルではこの辺りまで、自前のエラー制御でカバーするのは難しそうです。特にデバッグを困難にしてしまいそうで・・・ EC-CUBE が PHP 4 サポートを放棄して、try/catch を使える日を待とうかと思います。
|
ramrun |
投稿日時: 2009/5/7 0:54
対応状況: −−−
|
仙人 登録日: 2006/11/3 居住地: 投稿: 789 |
Re: 共通クラス内で「フロント機能」 or 「管理機能」の判定 引用:
try/catch と異なり、特定のエラーが特定の Page クラスで発生した場合に、固有の処理を行いたいといったケースが少々難しそうですね。 require_base.phpあたりでset_error_handlerして、LC_Pageでそれまでに捕まえたエラーをウンヌンするという考えでした。 単にエラーになりそうな箇所をset_error_handlerとrestre_error_handlerでサンドイッチして、その間のエラーだけ収集したほうがいいかな。
|
seasoft |
投稿日時: 2009/5/6 12:09
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: 共通クラス内で「フロント機能」 or 「管理機能」の判定 ramrun 様
非常に有用なサンプルをありがとうございます。とても良い感じです。 これでしたら、共通クラス内でのエラーを、フロント機能・管理機能のテンプレートを生かしたエラー表示ができそうです。 try/catch と異なり、特定のエラーが特定の Page クラスで発生した場合に、固有の処理を行いたいといったケースが少々難しそうですね。 以前にリターンコードで実装した SC_Helper_Mail#sfSendOrderMail を trigger_error/set_error_handler で実装するとどうなるかといった辺りを試してみようかと思います。
|
ramrun |
投稿日時: 2009/5/4 1:09
対応状況: −−−
|
仙人 登録日: 2006/11/3 居住地: 投稿: 789 |
Re: 共通クラス内で「フロント機能」 or 「管理機能」の判定 ヌシが釣れてましたw
私は大したことできませんがそれなりに古株?なので、「かくあるべき」みたいな形があるのは理解しているつもりなんですが... 具体的にどうこういえ...ないんですよね(汗)。 考えた人に出てきてもらえて、ほっとしているところですw で、なにも考えないのもアレなので、set_error_handlerを使って考えてみました。 SingletonのErrorHandlerにエラーを放り込んでおいて、LC_Pageで表示する... みたいなサンプル?のつもりです(汗)。
|
(1) 2 3 4 » |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |