我一直在尋找一個已經存在的問題,但是我沒有找到任何問題來問我想要弄清楚什麼。我能找到的最類似的問題是:php 5.3 avoid try/catch duplication nested within foreach loop (code sandwich)在PHP中,有一種方法可以避免在一個類的多個方法中重複相同的try/catch代碼?
好的,我工作的地方有一個帶PHP後端的Web應用程序。我們使用MVC類型的結構。我正在編寫一個擁有多個方法的控制器,並且在我的每個方法中,我都使用相同的try/catch代碼來包裝我的代碼。在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的裝飾器語法,只是爲了展示我在概念上構想的內容;我想要的代碼更喜歡這樣的行爲的內容:
class MyController {
@DefaultErrorHandling()
public function methodA() {
// code for methodB
}
@DefaultErrorHandling()
public function methodB() {
// code for methodB
}
@DefaultErrorHandling()
public function methodC() {
// code for methodC
}
}
凡@DefaultErrorHandling裝飾將包裹在標準的try/catch每個方法。有沒有一種方法可以實現這種行爲,所以我不必擁有所有這些具有重複代碼的方法?或者我想錯誤處理錯誤?
感謝任何花時間回答此問題的人。
我認爲這可能是獲得我要找的東西的最好方法。謝謝! –