2013-03-13 3 views
1

짧은 시간 이후로 나는 PHP에서 캐치를 시도하고 있습니다. 이제 새로운 오류가 발생할 때마다 화면에 치명적인 오류가 발생합니다. 사용자에게 친숙하지 않기 때문에 치명적인 오류 대신 에코와 같은 멋진 메시지를 사용자에게 제공 할 수 있는지 궁금합니다. 사용자 친화적 인 PHP는 캐치를 시도

내가 지금 가지고있는 코드입니다 :

public static function forceNumber($int){ 
    if(is_numeric($int)){ 
     return $int; 
} else { 
     throw new TypeEnforcerException($int.' must be a number'); 
} 
} 

public function setStatus($status) { 
    try { 
     $this->status = TypeEnforcer::forceInt($status); 
    } catch (TypeEnforcerException $e) { 
     throw new Exception($e->getMessage()); 
    } catch (Exception $e) { 
     throw new Exception($e->getMessage()); 
    } 

} 
+1

만약 그렇게 할 방법이 없다면 try-catch 블록이 없다. 그것이 실제로하는 것입니다 –

+0

어떻게 설명 할 수 있을까요? ...? –

+0

그래, 이미 시도한 코드 일부를 공유하십시오. –

답변

5

이 가장 모든 uncatched 예외를 잡을 수있는 프론트 엔드 컨트롤러와 해결 : 그런 다음 반환하는 코드를 작성할 수 있습니다

<?php 
require('bootstrap.php'); 

try { 
    $controllerService->execute($request); 
} catch (Exception $e) { 
    $controllerService->handleControllerException($e); 
} 

을 예외가 예외적 인 경우를 알리기 때문에 내부 서버 오류가 발생하므로 일반적으로 내부 서버 오류가 500입니다. 사용자는 단지 문제가 해결되지 않고 프로그램이 추락 한 것 외에는 무엇이 잘못되었는지에 관심을 가져서도 안됩니다.

유효성 검사 알림을 제공하기 위해 예외를 던지면 다른 레이어에있는 예외를 catch해야합니다. 예외를 사용하면 잘못된 결과를 초래할 수 있습니다.


편집 : 낮은 수준의 함수의, 함수가 기대와 INT 경우 PHP는 느슨하게, cast to intDocs를 입력하기 때문에 :

public static function forceNumber($int){ 
    $int = (int) $int; 
    return $int; 
} 

이 실제로 정수를 강제 할 것이다. 캐스트를 수행 할 수없는 경우 (예 : $int 완전히 호환되지 않음) PHP에서 예외가 발생합니다.

예제는 메소드의 이름으로 일부 번호의 유효성을 검사하고 그렇지 않은 경우 오류를 제공하기 위해 사용합니다 (여기서는 예외가 있음). 대신에 유효성 검사를해야합니다. 잘못된 입력이 예상되는 경우 잘못된 입력이 제공되는 경우 예외가 아닙니다. 예외를 사용하지 않을 것입니다.

+0

예를 들어 사용자에게 일반 오류 메시지에 대한 예외도 사용하고 싶다. 이름 필드가 있고 너무 오래, 짧은 등으로 채우면 그들이 무엇을 잘못하고 있는지 알고 있어야한다. 그들은 메시지를 가져야 만하고, 이름은 짧거나 길다. 예외를 사용할 수 있다고 생각했다. –

+0

@NickAudenaerde : 예외는 아니지만 유효성 검사 레이어가 반환하는 메시지이므로 메시지를 넣을 수있다. 출력은 보통 요청/양식 유효성 검사 레이어에서 수행됩니다. 하위 레벨 함수에서는 "실제"예외를 throw합니다 (필요한 경우). 하나의 요청에 * 여러 * 오류 메시지가있을 수 있지만 한 가지 예외. – hakre

+0

@ NickAudenaerde 그 이유가 예외인지 여부가 확실하지 않습니다. – Voitcus

관련 문제