이 기사의 예에서는 PHP에서 예외를 잡는 try catch에 대해 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 방법 분석은 다음과 같습니다.
try catch in php는 프로그램 코드에서 예외를 잡는 데 도움이 되므로 불필요한 오류를 잘 처리할 수 있습니다. 관심 있는 친구들이 살펴보세요.
PHP의 try{}catch{} 문 개요
PHP5는 다른 언어와 유사한 예외 처리 모듈을 추가합니다. PHP 코드에서 생성된 예외는 throw 문에 의해 발생되고 catch 문에 의해 포착될 수 있습니다. (참고: 먼저 던져야 얻을 수 있습니다)
예외 처리가 필요한 코드는 가능한 예외를 포착하기 위해 try 코드 블록에 배치되어야 합니다.
각 시도에는 해당하는 캐치가 하나 이상 있어야 합니다.
다양한 클래스에서 생성된 예외를 잡으려면 여러 catch를 사용하세요.
try 코드 블록이 더 이상 예외를 발생시키지 않거나 발생한 예외와 일치하는 catch를 찾을 수 없으면 PHP 코드는 마지막 catch로 점프한 후 계속 실행됩니다.
물론 PHP에서는 catch 블록 내에서 예외가 다시 발생하는 것을 허용합니다.
예외가 발생하면 후속 코드(번역자 주: 예외가 발생했을 때의 코드 블록을 나타냄)는 계속 실행되지 않으며 PHP는 첫 번째로 일치하는 catch를 찾으려고 시도합니다.
예외가 포착되지 않고 해당 처리를 위해 set_Exception_handler()를 사용할 필요가 없으면 PHP는 심각한 오류를 생성하고 Uncaught Exception...(uncaught 예외) 프롬프트 메시지를 출력합니다.
먼저 PHP에 내장된 예외 클래스의 기본 속성과 메서드를 살펴보겠습니다. (특정 구현 제외)
시도해 보세요{
}
캐치(){
새로운 예외()를 던집니다.
}
캐치(){
//여기서 이전 블록에서 발생한 예외를 잡을 수 있습니다
}
예외를 추가로 처리하려면 Try 문과 하나 이상의 catch 문을 포함하여 PHP에서 try{}catch{}를 사용해야 합니다. 예외를 발생시킬 수 있는 메서드를 호출하는 모든 코드는 try 문을 사용해야 합니다. Catch 문은 발생할 수 있는 예외를 처리하는 데 사용됩니다. 다음은 getCommandObject()에서 발생한 예외를 처리하는 방법을 보여줍니다.
시도해보세요 {
$mgr = 새로운 CommandManager();
$cmd = $mgr->getCommandObject("realcommand");
$cmd->실행();
} 잡기(예외 $e) {
$e->getMessage();
인쇄
종료();
}
?>
보시다시피, PHP에서 try{}catch{}와 함께 throw 키워드를 사용하면 클래스 메서드에서 반환된 값이 false 플래그로 "오염"되는 것을 방지할 수 있습니다. "예외" 자체는 다른 객체와는 다른 PHP 내장형이기 때문에 혼동이 없을 것입니다.
예외가 발생하면 try 문의 스크립트 실행이 중지되고 즉시 catch 문의 스크립트 실행으로 전환됩니다.
예는 다음과 같습니다.
포함 파일 오류로 인해 예외 발생
// 잘못된 데모
시도해보세요 {
요구('test_try_catch.php');
} 잡기(예외 $e) {
echo $e->getMessage();
}
// 예외를 올바르게 발생시킵니다
시도해보세요 {
if (file_exists('test_try_catch.php')) {
요구('test_try_catch.php');
} 그 밖의 {
새로운 예외 발생('파일이 존재하지 않습니다');
}
} 잡기(예외 $e) {
echo $e->getMessage();
}
예외가 발생했지만 포착되지 않으면 치명적인 오류가 발생합니다.
여러 예외를 포착하기 위한 다중 캐치
PHP는 일치하는 catch 블록을 쿼리합니다. 여러 개의 catch 블록이 있는 경우 각 catch 블록에 전달된 개체는 PHP가 입력해야 하는 catch 블록을 찾을 수 있도록 서로 다른 유형이어야 합니다. try 코드 블록이 더 이상 예외를 발생시키지 않거나 발생한 예외와 일치하는 catch가 없으면 PHP 코드는 마지막 catch로 점프한 후 계속 실행됩니다. 여러 예외를 포착하는 예는 다음과 같습니다.
MyException 클래스는 Exception을 확장합니다{
//첫 번째 매개변수 메시지가 반드시 지정되어야 하는 속성이 되도록 생성자를 재정의합니다.
공개 함수 __construct($message, $code=0){
//여기서 자신만의 코드를 정의할 수 있습니다
//모든 변수가 할당되었는지 확인하려면 parent::construct()를 동시에 호출하는 것이 좋습니다
상위 ::__construct($message, $code);
}
//상위 클래스에서 상속된 메소드를 다시 작성하고 문자열 출력 스타일을 사용자 정의합니다
공개 함수 __toString(){
__CLASS__를 반환합니다.":[".$this->code."]:".$this->message."
";
}
//이 예외에 대한 처리 방법을 사용자 정의
공개 함수 customFunction(){
echo "이 유형의 예외를 사용자 정의 방식으로 처리합니다";
}
}
//사용자 정의 확장을 테스트하기 위한 예외 클래스 MyException
을 생성합니다.
클래스 TestException{
Public $var; //객체가 성공적으로 생성되었는지 확인하는 데 사용되는 멤버 속성
Function __construct($value=0){ //발생하는 예외는 생성자에 전달된 값에 따라 결정됩니다.
~ ~
사용 사용 사용 사용 사용 ' s ' s ' s ' ' s 1부터 1부터 1까지 통해 통해 통해 통해 통해 사용 통해 사용 통해 통해 통해 통해 통해 통해 통해 통해 통해 ' s' ' ‐ to ‐ n r‐ n r‐ 그리고
throw new MyException("전달된 값 "1"은 잘못된 매개변수입니다.",5);break;
사례 2: // 매개변수 2를 전달한 후 PHP 내장 비정상 개체를 발생시킵니다.
~ > );
기본값: // 매개변수가 적법하지만 이상이 발생하지 않습니다
~
}
}
}
//예제 1, 예외가 없으면 프로그램이 정상적으로 실행되고, try에 있는 모든 코드가 실행되고, catch 블록은 실행되지 않습니다.
시도해 보세요{
$ Testobj = new testxception (); // 기본 매개변수를 사용하여 비정상적인 삭제 클래스 객체를 생성합니다
echo "********
"; //예외가 발생하지 않으면 이 명령문은 정상적으로 실행됩니다
} Catch (MyException $E) {// 사용자 커스텀 이상 블록 캡쳐
echo "사용자 지정 예외 캡처: $e
" //사용자 지정 방식으로 예외 메시지 출력
}catch(예외 $e){ | -예외 처리 수업
echo "기본 예외 캡처:".$e->getMessage()."
" //예외 메시지 출력
}
var_dump($testObj); //객체 생성 성공 여부를 확인합니다. 예외가 없으면 생성 성공입니다
//예제 2, 사용자 정의 예외 발생, 사용자 정의 예외 처리 클래스를 통해 이 예외를 포착하고 처리
시도해 보세요{
$testObj1 =new TestException(1); //1을 전달하면 맞춤 예외가 발생합니다.
echo "********
"; //이 명령문은 실행되지 않습니다
}catch(MyException $e){ // 이 catch 블록의 코드가 실행됩니다.
echo "사용자 정의 예외 잡기: $e
";
$e->customFunction();
}catch(예외 $e){ // 이 catch 블록은 실행되지 않습니다.
echo "기본 예외 잡기:".$e->getMessage()."
"
}
var_dump($testObj1); //예외가 발생하여 이 개체가 성공적으로 생성되지 않았습니다.
//예제 2, 내장 예외를 발생시키고 사용자 정의 예외 처리 클래스를 통해 이 예외를 포착하고 처리합니다
시도해 보세요{
$ TestObj2 = New TestException (2); // 2에서 통과, 내장된 이상 현상 발생
echo "********
"; //이 문장은 실행되지 않습니다
}catch(MyException $e){ // 이 catch 블록의 코드가 실행됩니다.
echo "사용자 정의 예외 잡기: $e
";
}catch(예외 $e){ // 이 catch 블록은 실행되지 않습니다.
echo "기본 예외 잡기:".$e->getMessage()."
"
}
var_dump($testObj2); //예외가 발생하여 이 개체가 성공적으로 생성되지 않았습니다.
?>
위 코드에서는 두 개의 예외 처리 클래스를 사용할 수 있습니다. 하나는 사용자 정의 예외 처리 클래스 MyException이고 다른 하나는 PHP의 내장 예외 처리 클래스 Exception입니다. try 블록에 테스트 클래스 TestException의 개체를 각각 생성하고 구성 메서드에 제공된 다양한 숫자 매개 변수에 따라 사용자 정의 예외 클래스 개체, 내장 예외 클래스 개체를 던지고 어떤 예외도 던지지 않고 해당 항목으로 점프합니다. catch 블록에서 실행됩니다. 예외가 발생하지 않으면 실행을 위한 catch 블록을 입력하지 않고 테스트 클래스 TestException의 객체가 성공적으로 생성됩니다.
이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.