오랫동안 여기를 검색하여 많은 PHP 코드를 읽었지만 여전히 만족스러운 답변을 찾을 수 없었습니다. 너무 많은 주제로 보일지 모르지만, 결국은 함께 스틱을.습니다. 도와 주실 수 있겠습니까?레이어를 통한 예외 재발생 및 상태 코드 사용
PHP 웹 사이트에서 DAL로 PDO가 있고 BLL 개체에서 사용하는 것은 UI에서 호출됩니다. 이제 인 경우이 발생하면 PDO가 PDOException을 발생시킵니다. 물론 UI 레이어는 PDOExceptions에 대해 알 필요가 없으므로 BLL 객체가 PDOException을 catch합니다. 하지만 지금은 뭐야?
나는
- 예외가 정말 예외적 인 상황이며,
- 하나는 상위 계층에서 낮은 수준의 예외가 발생하지 않도록 하위 계층에서 예외를 다시 throw합니다 읽었습니다.
(함수 인수에 관심을 지불하지 마십시오) 내 문제를 설명하자
class User
{
function signUp()
{
try
{
//executes a PDO query
//returns a code/flag/string hinting the status of the sign up:
//success, username taken, etc.
}
catch (PDOException $e)
{
//take the appropriate measure, e.g. a rollback
//DataAccessException gets all the information (e.g. message, stack
//trace) of PDOException, and maybe adds some other information too
//if not, it is like a "conversion" from PDOException to DAE
throw new DataAccessException();
}
}
}
//and in an upper layer
$user = new User();
try
{
$status = $user->signUp();
//display a message regarding the outcome of the operation
//if it was technically successful
}
catch (DataAccessException $e)
{
//a technical problem occurred
//log it, and display a friendly error message
//no other exception is thrown
}
이것은 적합한 솔루션인가? PDOException을 다시 throw 할 때 예외 체인을 사용하는 것이 적절하지 않다고 생각합니다 (디버깅 정보가 중복되므로 DataAccessException은 PDOException의 전체 스택 추적을 포함하여 모든 것을 가져옵니다).
미리 감사드립니다. 내가 좋은 자원이이 게시물을 알 수있는 바와 같이
저에게 완벽하게 보입니다. 당신이 그것을 확신하는 한; 보다 일반적인 DAE 예외로 PDO 예외를 다시 throw하면 전환시 디버그 정보가 손실되지 않습니다. 이상적으로는 기본 Exception 클래스에 지정된 세 번째 매개 변수로 전달해야하므로 전달됩니다. – Atli
답장을 보내 주셔서 감사합니다! 예외 연결 (PDOE를 세 번째 매개 변수로 전달)을 고려했지만,이 경우에는 (php.net 예제와는 반대로) 실제로 요점을 보지 못합니다. 모든 유용한 디버깅 정보가있는 PDOE가있을 것입니다. 동일한 데이터를 가지고 있지만 위의 계층에서 오는 또 다른 예외가 있습니다. – Piedone