悲しいことに、私は従来のPHP4システムを利用して、機能を追加する必要があります。数年でなくても数ヶ月間PHP5に移植するためのリソースがあるようには見えません。ここ数年の間、私を悩ませた主な事の一つは、例外をきれいに投げる能力がないということです。このため、あらゆる種類のエラーチェックコードは、何が起こっているのかを常に妨害しなければなりません。ベスト代替例外処理モデル
したがって、例外モデルのない言語での例外処理の清潔さをエミュレートするのに最適な戦略は何ですか?
ジョエルは、これが答えで述べたように、例外について言っている:
http://www.joelonsoftware.com/items/2003/10/13.html
は、彼らが機能するためにあまりにも多くの可能な出口ポイントを作成します。正しいコードを書くためには、あなたの関数を通して考えられるすべてのコードパスについて考える必要があります。例外を発生させてその場でキャッチしない関数を呼び出すたびに、突然終了した関数や矛盾した状態のまま残った関数、またはそれ以外のコードのパスによって引き起こされる不思議なバグの機会が生まれますについて考える。
より良い方法は、関数が間違っているときにエラー値を返し、どれほど冗長であっても明示的に処理することです。シンプルな3行プログラムでなければならないことは、エラーチェックを入れたときに48行に咲くことがよくありますが、それは人生だと思います。プログラムをより堅牢にするわけではありません。私は、C/C++/Javaスタイルの言語のプログラマが例外に惹かれている理由は、構文が複数の値を返す関数を簡潔に呼び出すことができないため、戻り値を生成する関数を書くのは難しいからです値を返すか、エラーを返します。
ただし、言語の優れた例外モデルでは、実際に例外をスローするように呼び出される関数を指定します。これは、関数が終了する場所がexaactly 0であることを意味します(コードは単に例外をスローするのではなくfalseを返します)が、関数が終了する場所はまったく1つだけです。呼び出し関数。誰でもすることができます他の人が扱うようにすべての例外を上に通過するコードがありますが、それはあなたを意味するものではありませんはきれいに効率的に使用できるツールを取り除かなければなりません。
実際、関数は呼び出し元コードから期待される戻り値の範囲外の値を返すことがあります。優れたプログラマは、エラーコードや条件を含むすべての可能な戻り値を処理します。例外モデルは、彼にそれをきれいにする方法を与えます。
私は実際にはエラーハンドラを作成してみましたが、ローカルファイルにローカルエラー処理を保存する方法はわかりませんでした。 1つの考えは、debug_backtraceの結果を使用して現在のクラスを把握し、そのクラスに対して特定の "handle_error"メソッドを呼び出すことでした。どう思いますか? – Zak
私は間違いなく動作すると思いますが、正直なところです。私はおそらく3年後にPHP4で作業していません。おそらく長く。あなたがそれを有効にすることができれば、ここにコメントを残してください! –