Latest web development tutorials
×

PHP 코스

PHP 코스 PHP 간략한 소개 PHP 설치 PHP 문법 PHP 변수 PHP echo/print PHP 데이터 유형 PHP 상수 PHP 현 PHP 운영자 PHP If...Else PHP Switch PHP 배열 PHP 배열을 정렬 PHP 자동 전역 PHP While 순환 PHP For 순환 PHP 기능 PHP 매직 변수 PHP 네임 스페이스 PHP 객체 지향

PHP 형태

PHP 형태 PHP 폼 인증 PHP 형태 - 필수 입력 사항 PHP 형태 - 확인 이메일 및 URL PHP 완전한 형태의 인스턴스 PHP $_GET 변수 PHP $_POST 변수

PHP 고급 자습서

PHP 다차원 배열 PHP 날짜 PHP 포함 PHP 파일 PHP 파일 업로드 PHP Cookie PHP Session PHP E-mail PHP 보안 E-mail PHP Error PHP Exception PHP 필터 PHP 고급 필터 PHP JSON

PHP 7 새로운 기능

PHP 7 새로운 기능

PHP 데이터베이스

PHP MySQL 간략한 소개 PHP MySQL 연결 PHP MySQL 데이터베이스 만들기 PHP MySQL 데이터 테이블 만들기 PHP MySQL 데이터를 삽입 PHP MySQL 여러 데이터를 삽입 PHP MySQL 문 준비 PHP MySQL 데이터 읽기 PHP MySQL WHERE PHP MySQL ORDER BY PHP MySQL UPDATE PHP MySQL DELETE PHP ODBC

PHP XML

XML Expat Parser XML DOM XML SimpleXML

PHP & AJAX

AJAX 간략한 소개 AJAX PHP AJAX 데이터베이스 AJAX XML AJAX 실시간 검색 AJAX RSS Reader AJAX 투표

PHP 참조 설명서

PHP Array PHP Calendar PHP cURL PHP Date PHP Directory PHP Error PHP Filesystem PHP Filter PHP FTP PHP HTTP PHP Libxml PHP Mail PHP Math PHP Misc PHP MySQLi PHP PDO PHP SimpleXML PHP String PHP XML PHP Zip PHP Timezones PHP 이미지 처리 PHP RESTful

PHP 예외 처리

정상적인 흐름을 지정 할 때 스크립트 오류를 ​​변경하는 예외가 발생합니다.


무엇 비정상

PHP 5는 오류가 객체 지향 처리하기위한 새로운 방법을 제공합니다.

예외 처리는 특정 에러 (예외) 스크립트의 정상적인 흐름을 변경 발생시 사용된다. 이 조건은 예외라고합니다.

예외가 발생하면, 대개가 발생합니다

  • 현재 코드 상태가 저장됩니다
  • 코드의 실행은 미리 규정 (정의) 예외 핸들러 함수로 절환
  • 몇몇 경우에, 프로세서는 상태 코드에 저장된 코드에서 다시 시작될 수있다 스크립트의 실행을 종료하거나 다른 위치 코드로부터 스크립트를 계속

우리는 다른 오류 처리 방법을 표시합니다 :

  • 기본 사용 예외
  • 사용자 정의 예외 핸들러 만들기
  • 여러 예외
  • Rethrows
  • 최상위 예외 핸들러 세트

참고 : 예외는 오류가 발생하는 경우에 사용한다, 코드의 다른 위치로 이동 지정된 점에 사용할 수 없습니다.


기본 사용 예외

예외가 발생하면 진행하지 않는 다음 코드는 PHP는 일치하는 "캐치"블록을 찾기 위해 노력할 것입니다.

예외가 있지만 모든 해당 치료를 위해 set_exception_handler의 사용 ()와 함께 발견되지 않는 경우, 심각한 오류 (치명적 오류)가 발생, 출력 "캐치되지 않는 예외"(캐치되지 않는 예외) 오류 메시지.

의 예외를 던져하려고하자,하지만 그것을 잡으려고하지 않습니다

<?php
// 创建一个有异常处理的函数
function checkNum($number)
{
	if($number>1)
	{
		throw new Exception("Value must be 1 or below");
	}
	return true;
}

// 触发异常
checkNum(2);
?>

위의 코드는 다음과 유사한 오류가 발생합니다 :

Fatal error: Uncaught exception 'Exception' with message 'Value must be 1 or below' in /www/w3big/test/test.php:7 Stack trace: #0 /www/w3big/test/test.php(13): checkNum(2) #1 {main} thrown in /www/w3big/test/test.php on line 7

시도 던져 잡기

위의 예에서 나타나는 오류를 방지하기 위해, 우리는 예외를 처리 할 수있는 적절한 코드를 작성해야합니다.

적절한 처리 예외 코드를 포함해야한다 :

  1. 시도 -은 "시도"블록 내에 위치한다 비정상적인 기능을 사용. 예외가 발생되지 않은 경우, 코드는 정상적으로 계속된다. 예외가 발생되는 경우,이 예외가 발생합니다.
  2. 던져 - 예외 조항을 유발하는 방법으로. 각 "던져"적어도 하나의 "캐치"에 해당해야합니다.
  3. 캐치 - "캐치"블록은 예외를 catch 및 예외 메시지를 포함하는 개체를 만듭니다.

예외를 실행하자 :

<?php
// 创建一个有异常处理的函数
function checkNum($number)
{
	if($number>1)
	{
		throw new Exception("变量值必须小于等于 1");
	}
		return true;
}
	
// 在 try 块 触发异常
try
{
	checkNum(2);
	// 如果抛出异常,以下文本不会输出
	echo '如果输出该内容,说明 $number 变量';
}
// 捕获异常
catch(Exception $e)
{
	echo 'Message: ' .$e->getMessage();
}
?>

위의 코드는 다음과 같은 오류가 발생합니다 :

Message: 变量值必须小于等于 1

예 설명 :

위의 코드는 예외가 발생하고 잡는다 :

  1. checkNum () 함수를 만듭니다. 이 번호가 1보다 큰지 여부를 검출한다. 이 경우, 예외가 발생합니다.
  2. 는 "시도"블록에 checkNum () 함수를 호출합니다.
  3. checkNum () 함수 예외가 발생합니다.
  4. "잡아라"블록이 예외를 수신하고 예외 ($ 전자)에 대한 정보가 포함 된 개체를 만듭니다.
  5. 이 예외 객체에서 $ 전자를 호출하여> GetMessage 함수 () 예외에 대한 오류 메시지의 출력.

그러나 원리 "캐치 일치해야합니다 모든 던져"를 수행하기 위해, 당신은 누락 된 오류를 처리 할 수있는 최상위 예외 핸들러를 설정할 수 있습니다.


사용자 정의 예외 클래스를 만듭니다

사용자 정의 예외 처리기를 만드는 것은 매우 간단합니다. 우리는 단순히 예외가 PHP에서 발생할 때, 당신은 그 함수를 호출 할 수 있습니다, 특별한 클래스를 만들 수 있습니다. 클래스는 예외 클래스의 확장이어야합니다.

사용자 정의 예외 클래스는 PHP의 예외 클래스에 정의 된 모든 속성을 상속, 사용자 정의 기능을 추가 할 수 있습니다.

예외 클래스를 만들어 시작

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 错误信息
		$errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile()
		.': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址';
		return $errorMsg;
	}
}

$email = "[email protected]";

try
{
	// 检测邮箱
	if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
	{
		// 如果是个不合法的邮箱地址,抛出异常
		throw new customException($email);
	}
}

catch (customException $e)
{
//display custom message
echo $e->errorMessage();
}
?>

이 새로운 클래스는 이전 예외 클래스의 복사, 더하기으로 ErrorMessage () 함수입니다. 그것은 기존의 클래스 속성과 메서드를 상속 그래서, 기존의 클래스의 복사본이기 때문에, 우리는의 getline () 대해서 getFile ()와 GetMessage 함수 () 같은 예외 클래스 메소드를 사용할 수 있습니다.

예 설명 :

위의 코드는 예외가 발생하고, 사용자 정의 예외 클래스를 통해 캡처 :

  1. 만들 수있는 이전 예외 클래스의 확장으로 customException () 클래스입니다. 있도록 모든 속성과 이전 예외 클래스의 메서드를 상속합니다.
  2. 으로 ErrorMessage () 함수를 만듭니다. 이메일 주소가 유효하지 않은 경우,이 함수는 에러 메시지를 반환한다.
  3. 이메일은 $ 변수는 무효 이메일 주소 문자열로 설정된다.
  4. 전자 메일 주소입니다 "시도"블록의 구현은 유효하지 않습니다 때문에 예외가 발생합니다.
  5. "잡아라"블록은 예외를 catch하고 오류 메시지를 표시합니다.

여러 예외

당신은 다양한 상황을 감지 스크립트로 여러 예외를 사용할 수 있습니다.

여러에서는 if..else 블록, 또는 코드 스위치 블록, 또는 둥지 여러 예외를 사용할 수 있습니다. 이러한 예외는 다른 예외 클래스를 사용하고 다른 오류 메시지를 반환 할 수 있습니다 :

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 错误信息
		$errorMsg = '错误行号 '.$this->getLine().' in '.$this->getFile()
		.': <b>'.$this->getMessage().'</b> 不是一个合法的 E-Mail 地址';
		return $errorMsg;
	}
}

$email = "[email protected]";

try
{
	// 检测邮箱
	if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE)
	{
		// 如果是个不合法的邮箱地址,抛出异常
		throw new customException($email);
	}
	// 检测 "example" 是否在邮箱地址中
	if(strpos($email, "example") !== FALSE)
	{
		throw new Exception("$email 是 example 邮箱");
	}
}
catch (customException $e)
{
	echo $e->errorMessage();
}
catch(Exception $e)
{
	echo $e->getMessage();
}
?>

예 설명 :

코드는 상기 어느 하나의 조건이 만족되지 않는 경우, 예외가 발생 개의 조건을 테스트 :

  1. 만들 수있는 이전 예외 클래스의 확장으로 customException () 클래스입니다. 있도록 모든 속성과 이전 예외 클래스의 메서드를 상속합니다.
  2. 으로 ErrorMessage () 함수를 만듭니다. 이메일 주소가 유효하지 않은 경우,이 함수는 에러 메시지를 반환한다.
  3. 은 $ 이메일 변수가 유효한 전자 메일 주소,하지만 문자열 "예"를 포함하는 문자열로 설정됩니다.
  4. 첫 번째 조건 코드의 "시도"블록의 구현은, 예외는 throw되지 않습니다.
  5. 이메일 문자열 "예"를 포함하기 때문에, 두 번째 조건은 예외를 트리거한다.
  6. "잡아라"블록은 예외를 catch하고 적절한 오류 메시지가 표시됩니다.

customException 클래스 예외가 발생하지만 기본 예외 핸들 예외를 포착, customException을 잡은되지 않습니다.


Rethrows

예외가 발생하면 경우에, 당신은 그것을 처리 할 수있는 표준 방법과 다를하실 수 있습니다. 다시 "캐치"블록에서 발생 될 수 있습니다.

스크립트는 사용자의 시스템 오류에서 숨겨진해야합니다. 프로그래머가 시스템 에러는 중요 할 수 있지만, 사용자는 그들이 관심이 없다. 사용자가 사용하기 위해 쉽게하기 위해, 당신은 상대적으로 사용자에게 친숙한 메시지와 함께 다시 예외를 던질 수 :

<?php
class customException extends Exception
{
	public function errorMessage()
	{
		// 错误信息
		$errorMsg = $this->getMessage().' 不是一个合法的 E-Mail 地址。';
		return $errorMsg;
	}
}

$email = "[email protected]";

try
{
	try
	{
		// 检测 "example" 是否在邮箱地址中
		if(strpos($email, "example") !== FALSE)
		{
			// 如果是个不合法的邮箱地址,抛出异常
			throw new Exception($email);
		}
	}
	catch(Exception $e)
	{
		// 重新抛出异常
		throw new customException($email);
	}
}
catch (customException $e)
{
	// 显示自定义信息
	echo $e->errorMessage();
}
?>

예 설명 :

이 문자열 "예"를 포함하는 경우, 상기 코드가 전자 메일 주소를 검출한다. 이 경우, 다시 예외가 발생합니다 :

  1. 만들 수있는 이전 예외 클래스의 확장으로 customException () 클래스입니다. 있도록 모든 속성과 이전 예외 클래스의 메서드를 상속합니다.
  2. 으로 ErrorMessage () 함수를 만듭니다. 이메일 주소가 유효하지 않은 경우,이 함수는 에러 메시지를 반환한다.
  3. 은 $ 이메일 변수가 유효한 전자 메일 주소,하지만 문자열 "예"를 포함하는 문자열로 설정됩니다.
  4. 블록 코드의 또 다른 "시도"블록을 포함 "시도", 그래서 당신은 다시 예외를 던질 수 있습니다.
  5. 이메일 문자열 "예"를 포함하기 때문에, 따라서, 예외를 발생시킨다.
  6. "잡아라"블록은 예외가 다시 던져 "customException"을 잡을 수 있습니다.
  7. "customException"을 캡처 및 오류 메시지를 표시합니다.

예외가 현재 "시도"블록에서 발견되지 않으면, 더 높은 레벨의 캐치 블록을 찾는다.


최상위 예외 핸들러 세트

set_exception_handler () 함수는 사용자 정의 된 모든 기능 캐치되지 않는 예외를 처리하도록 설정 될 수있다.

<?php
function myException($exception)
{
	echo "<b>Exception:</b> " , $exception->getMessage();
}

set_exception_handler('myException');

throw new Exception('Uncaught Exception occurred');
?>

다음 위 코드의 출력은 :

Exception: Uncaught Exception occurred

위의 코드에서, 거기에는 "캐치"블록 없지만 최상위 예외 핸들러가 트리거. 이 기능은 모든 캐치되지 않는 예외를 캡처하는 데 사용되어야한다.


예외 규칙

  • 예외 처리 코드는 잠재적 인 예외를 포착하기 위해 시도 블록에 배치 될 필요가있다.
  • 각 던지거나 시도 코드 블록은 적어도 하나의 해당하는 catch 블록이 있어야합니다.
  • 당신은 예외의 다른 유형을 잡기 위해 여러 catch 블록을 사용할 수 있습니다.
  • try 코드 블록 내의 될 수있다 catch 블록 (다시 발생) 예외가 발생합니다.

한마디로 : 당신이 예외를 던질 경우, 당신은 그것을 잡을해야합니다.