PHP-오류 및 예외 처리
오류 처리는 프로그램에서 발생한 오류를 포착 한 다음 적절한 조치를 취하는 프로세스입니다. 오류를 제대로 처리하면 예기치 않은 결과가 많이 발생할 수 있습니다.
PHP에서 오류를 처리하는 것은 매우 간단합니다.
die () 함수 사용
PHP 프로그램을 작성하는 동안 진행하기 전에 가능한 모든 오류 조건을 확인하고 필요한 경우 적절한 조치를 취해야합니다.
없이 다음 예제를 시도하십시오 /tmp/test.xt 파일 및이 파일과 함께.
<?php
if(!file_exists("/tmp/test.txt")) {
die("File not found");
}else {
$file = fopen("/tmp/test.txt","r");
print "Opend file sucessfully";
}
// Test of the code here.
?>
이렇게하면 효율적인 코드를 작성할 수 있습니다. 위의 기술을 사용하면 오류가 발생할 때마다 프로그램을 중지하고보다 의미 있고 사용자 친화적 인 메시지를 표시 할 수 있습니다.
사용자 지정 오류 처리 기능 정의
오류를 처리하기 위해 고유 한 함수를 작성할 수 있습니다. PHP는 오류 처리 기능을 정의하는 프레임 워크를 제공합니다.
이 함수는 최소 2 개의 매개 변수 (오류 수준 및 오류 메시지)를 처리 할 수 있어야하지만 최대 5 개의 매개 변수 (옵션 : 파일, 줄 번호 및 오류 컨텍스트)를 허용 할 수 있습니다.
통사론
error_function(error_level,error_message, error_file,error_line,error_context);
Sr. 아니요 | 매개 변수 및 설명 |
---|---|
1 | error_level 필수-사용자 정의 오류에 대한 오류 보고서 수준을 지정합니다. 값 숫자 여야합니다. |
2 | error_message 필수-사용자 정의 오류에 대한 오류 메시지를 지정합니다. |
삼 | error_file 선택 사항-오류가 발생한 파일 이름을 지정합니다. |
4 | error_line 선택 사항-오류가 발생한 행 번호를 지정합니다. |
5 | error_context 선택 사항-오류 발생시 사용중인 모든 변수 및 해당 값을 포함하는 배열을 지정합니다. |
가능한 오류 수준
이러한 오류 보고서 수준은 사용자 정의 오류 처리기를 사용할 수있는 다양한 유형의 오류입니다. 이 값은 다음을 사용하여 조합하여 사용됩니다.| 운영자
Sr. 아니요 | 상수 및 설명 | 값 |
---|---|---|
1 | .E_ERROR 치명적인 런타임 오류. 스크립트 실행이 중지됨 |
1 |
2 | E_WARNING 치명적이지 않은 런타임 오류. 스크립트 실행이 중지되지 않습니다. |
2 |
삼 | E_PARSE 컴파일 시간 구문 분석 오류. 구문 분석 오류는 구문 분석기에 의해서만 생성되어야합니다. |
4 |
4 | E_NOTICE 런타임 알림. 스크립트가 오류 일 수 있지만 스크립트를 정상적으로 실행할 때도 발생할 수 있음을 발견했습니다. |
8 |
5 | E_CORE_ERROR PHP를 처음 시작할 때 발생하는 치명적인 오류. |
16 |
6 | E_CORE_WARNING 치명적이지 않은 런타임 오류. 이것은 PHP의 초기 시작 중에 발생합니다. |
32 |
7 | E_USER_ERROR 사용자가 생성 한 치명적인 오류입니다. 이것은 프로그래머가 PHP 함수 trigger_error ()를 사용하여 설정 한 E_ERROR와 같습니다. |
256 |
8 | E_USER_WARNING 치명적이지 않은 사용자 생성 경고입니다. 이것은 프로그래머가 PHP 함수 trigger_error ()를 사용하여 설정 한 E_WARNING과 같습니다. |
512 |
9 | E_USER_NOTICE 사용자 생성 통지. 이것은 프로그래머가 PHP 함수 trigger_error ()를 사용하여 설정 한 E_NOTICE와 같습니다. |
1024 |
10 | E_STRICT 런타임 알림. PHP가 코드에 대한 변경 사항을 제안하도록하여 코드의 최상의 상호 운용성과 호환성을 보장합니다. |
2048 |
11 | E_RECOVERABLE_ERROR 캐치 가능한 치명적인 오류입니다. 이것은 E_ERROR와 비슷하지만 사용자 정의 핸들에 의해 잡힐 수 있습니다 (set_error_handler () 참조) |
4096 |
12 | E_ALL 레벨 E_STRICT를 제외한 모든 오류 및 경고 (E_STRICT는 PHP 6.0부터 E_ALL의 일부가 됨) |
8191 |
위의 모든 오류 수준은 다음 PHP 내장 라이브러리 함수를 사용하여 설정할 수 있습니다. 여기서 level cab은 위 표에 정의 된 값 중 하나입니다.
int error_reporting ( [int $level] )
다음은 하나의 오류 처리 함수를 만드는 방법입니다.
<?php
function handleError($errno, $errstr,$error_file,$error_line) {
echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
echo "<br />";
echo "Terminating PHP Script";
die();
}
?>
사용자 정의 오류 처리기를 정의한 후에는 PHP 내장 라이브러리를 사용하여 설정해야합니다. set_error_handler함수. 이제 존재하지 않는 함수를 호출하여 예제를 살펴 보겠습니다.
<?php
error_reporting( E_ERROR );
function handleError($errno, $errstr,$error_file,$error_line) {
echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
echo "<br />";
echo "Terminating PHP Script";
die();
}
//set error handler
set_error_handler("handleError");
//trigger error
myFunction();
?>
예외 처리
PHP 5에는 다른 프로그래밍 언어와 유사한 예외 모델이 있습니다. 예외는 중요하며 오류 처리를 더 잘 제어 할 수 있습니다.
예외와 관련된 새로운 키워드를 설명하겠습니다.
Try− 예외를 사용하는 함수는 "try"블록에 있어야합니다. 예외가 트리거되지 않으면 코드가 정상적으로 계속됩니다. 그러나 예외가 트리거되면 예외가 "발생"됩니다.
Throw− 이것이 예외를 트리거하는 방법입니다. 각 "던지기"에는 최소한 하나의 "잡기"가 있어야합니다.
Catch − "catch"블록은 예외를 검색하고 예외 정보를 포함하는 객체를 생성합니다.
예외가 발생하면 명령문 다음에 나오는 코드가 실행되지 않고 PHP는 첫 번째 일치하는 catch 블록을 찾으려고 시도합니다. 예외가 잡히지 않으면 "Uncaught Exception ..."과 함께 PHP 치명적 오류가 발생합니다.
예외가 발생하고 PHP 내에서 포착 ( "catched") 될 수 있습니다. 코드는 try 블록으로 둘러싸 일 수 있습니다.
각 시도에는 해당 catch 블록이 하나 이상 있어야합니다. 여러 catch 블록을 사용하여 다른 클래스의 예외를 포착 할 수 있습니다.
예외는 catch 블록 내에서 throw (또는 다시 throw) 될 수 있습니다.
예
다음은 코드 조각입니다.이 코드를 파일에 복사하여 붙여넣고 결과를 확인하십시오.
<?php
try {
$error = 'Always throw this error';
throw new Exception($error);
// Code following an exception is not executed.
echo 'Never executed';
}catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
// Continue execution
echo 'Hello World';
?>
위의 예에서 $ e-> getMessage 함수는 오류 메시지를 가져 오는 데 사용됩니다. 다음에서 사용할 수있는 기능이 있습니다.Exception 수업.
getMessage() − 예외 메시지
getCode() − 예외 코드
getFile() − 소스 파일 이름
getLine() − 소스 라인
getTrace() − backtrace ()의 n 배열
getTraceAsString() − 형식화 된 추적 문자열
사용자 지정 예외 처리기 만들기
사용자 지정 예외 처리기를 정의 할 수 있습니다. 다음 함수를 사용하여 사용자 정의 예외 처리기 함수를 설정합니다.
string set_exception_handler ( callback $exception_handler )
여기 exception_handler포착되지 않은 예외가 발생할 때 호출 할 함수의 이름입니다. 이 함수는 set_exception_handler ()를 호출하기 전에 정의되어야합니다.
예
<?php
function exception_handler($exception) {
echo "Uncaught exception: " , $exception->getMessage(), "\n";
}
set_exception_handler('exception_handler');
throw new Exception('Uncaught Exception');
echo "Not Executed\n";
?>
PHP 오류 처리 함수에서 전체 오류 처리 함수 세트 확인