나는 이미이 질문을하는 기존 질문을 찾고 있었지만, 내가 알아 내려고하는 질문을 찾을 수 없었다. 내가 찾을 수있는 가장 비슷한 질문했다이 : php 5.3 avoid try/catch duplication nested within foreach loop (code sandwich) 내가 근무 장소가 PHP 백 엔드와 웹 응용 프로그램을 가지고 있도록PHP에서 클래스의 여러 메소드에서 동일한 try/catch 코드를 반복하는 것을 피할 수있는 방법이 있습니까?
좋아요. 우리는 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가 파이썬과 같은 데코레이터 구문을 지원하지 않는다는 것을 알고 있지만 개념적으로 구상하고있는 것을 보여주기 위해; 나는 코드가 더 이런 식으로 뭔가를 작동하려면 다음 @DefaultErrorHandling 데코레이터가 표준 시도/캐치의 각 방법을 포장 할
class MyController {
@DefaultErrorHandling()
public function methodA() {
// code for methodB
}
@DefaultErrorHandling()
public function methodB() {
// code for methodB
}
@DefaultErrorHandling()
public function methodC() {
// code for methodC
}
}
. 이 동작을 구현할 수있는 방법이 있습니까? 그래서 반복되는 코드를 가지고있는 모든 메서드를 가질 필요가 없습니다. 아니면 잘못 처리하는 것에 대해 생각하고 있습니까?
답변에 시간을 할애하는 사람 덕분입니다.
아마 내가 생각하는 것을 얻는 가장 좋은 방법이라고 생각합니다. 감사! –