私は既にこれを尋ねている既存の質問を探していましたが、私が把握しようとしていることをよく聞く質問は見つかりませんでした。私が見つけることができる最も類似した質問はこれでした:php 5.3 avoid try/catch duplication nested within foreach loop (code sandwich)PHPには、クラスの複数のメソッドで同じtry/catchコードを繰り返さないようにする方法がありますか?
私が働いている場所は、PHPのバックエンドを持つWebアプリケーションを持っています。 MVC型の構造体を使用します。私は複数のメソッドを持つコントローラを作成しています。それぞれのメソッドで、同じtry/catchコードでコードをラップしています。キャッチでは、例外、クラスへの参照、エラーメッセージを作成するメソッドへの関数への参照を渡し、エラーメッセージがアプリケーション全体で同じフォーマットになるようにします。
class MyController {
public function methodA() {
try {
// code for methodA
} catch(Exception $e) {
$errorMessage = Tasks::buildErrorMessage($e, __CLASS__, __FUNCTION__);
throw new Exception($errorMessage);
}
}
public function methodB() {
try {
// code for methodB
} catch(Exception $e) {
$errorMessage = Tasks::buildErrorMessage($e, __CLASS__, __FUNCTION__);
throw new Exception($errorMessage);
}
}
public function methodC() {
try {
// code for methodC
} catch(Exception $e) {
$errorMessage = Tasks::buildErrorMessage($e, __CLASS__, __FUNCTION__);
throw new Exception($errorMessage);
}
}
}
のでbuildErrorMessage関数がエラーメッセージをフォーマットコードを繰り返すことから、それぞれの方法を防ぎますが、実際には同じコードは、クラス内のすべての方法を通じ広がったについての私を悩ますものがある:それは、このものになります。私は、PHPがPythonのようなデコレータ構文をサポートしていないことを知っていますが、私が概念的に想定していることを実証するためだけです。 @DefaultErrorHandlingデコレータは、その標準のtry/catchで各メソッドをラップします
class MyController {
@DefaultErrorHandling()
public function methodA() {
// code for methodB
}
@DefaultErrorHandling()
public function methodB() {
// code for methodB
}
@DefaultErrorHandling()
public function methodC() {
// code for methodC
}
}
:私は、コードをよりこのような何かを動作するようにしたいです。私はこの動作を達成する方法があるので、これらのメソッドのすべてに繰り返しコードがある必要はありませんか?または、エラー処理について間違って考えていますか?
これに答える時間がかかる人に感謝します。
おそらく私が探しているものを得るための最良の方法だと思います。ありがとう! –