오류가 발생하면 스크립트의 정상적인 흐름이 중단되고 예외를 사용하여 이를 변경할 수 있습니다. 사용자는 PHP 코드베이스에 이미 내장된 예외 클래스를 확장하여 라이브러리, 회사 또는 애플리케이션의 요구 사항에 따라 예외를 사용자 정의할 수 있습니다. 여기서는 내장 예외 클래스에서 가져오는 하위 클래스의 범위 내에 있는 속성과 멤버를 볼 수 있습니다.
광고 이 카테고리에서 인기 있는 강좌 PHP 개발자 - 전문 분야 | 8개 코스 시리즈 | 3가지 모의고사무료 소프트웨어 개발 과정 시작
웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등
예외가 발생하면 다음과 같은 일이 발생합니다.
기본 제공 예외와 별도로 특정 예외를 사용자 정의해야 하는 이유를 알려주세요.
사용자 정의 예외를 발생시키려면 이미 내장된 Exception 클래스에서 다른 클래스를 확장하면 됩니다.
namespace CustExcep; class CustException extends \Exception { }
이제 위의 CustException 클래스가 생성되었으므로 아래와 같이 사용자 정의 예외를 발생시킬 수 있습니다.
throw new \CustExcep\CustException('Insert an Exception message here');
필요에 따라 이를 사용자 정의하여 파일, 코드, 줄 및 해당 메시지와 같은 특정 클래스 속성을 재정의하거나 __toString() 메서드를 사용하여 이 예외 메시지를 작업해야 하는 형식으로 강제 설정할 수도 있습니다.
몇 가지 예를 통해 이 기능의 작동을 살펴보겠습니다.
코드:
<?php /** * Here defining a class for custom exception */ class CustException extends Exception { // Here we are redefining the exception message so it is not optional public function __construct($exmsg, $val = 0, Exception $old = null) { // random code goes here $exmsg = 'Default'; // ensure assignment of all values correctly parent::__construct($exmsg, $val, $old); } // representing the custom string object public function __toString() { return __CLASS__ . ": [{$this->code}]: {$this->message}\n"; } public function custFunc() { echo "Insert any custom message here\n"; } } /** * This class to test the exception */ class ExceptionTest { public $var; const NO_EXCEPTION = 0; const CUST_EXCEPTION = 1; const DEF_EXCEPTION = 2; function __construct($val = self::NO_EXCEPTION) { switch ($val) { case self::CUST_EXCEPTION: // throw custom exception throw new CustException('1 is considered as invalid', 5); break; case self::DEF_EXCEPTION: // throw default one. throw new Exception('2 is considered an invalid parameter', 6); break; default: // Will not throw any exception and creates an object here $this->var = $val; break; } } } // Example 1 try { $new = new ExceptionTest(ExceptionTest::CUST_EXCEPTION); } catch (CustException $exp) { // This exception will be caught echo "Test custom exception is caught\n", $exp; $exp->custFunc(); } catch (Exception $exp) { // This is skipped echo "Default exception is caught here\n", $exp; }
출력:
설명:
코드:
<?php class custException extends Exception { public function custMsg() { //error message $errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile() .': <b>'.$this->getMessage().'</b> is not a valid password. Please enter a valid one.'; return $errorMsg; } } $pwd = "Password@123"; try { //validation if(filter_var($pwd, FILTER_VALIDATE_EMAIL) === FALSE) { //exception thrown if password invalid throw new custException($pwd); } } catch (custException $error) { //show custom error echo $error->custMsg(); } ?>
출력:
설명:
장점은 아래와 같습니다.
이 글에서는 예외를 사용자 정의하고 처리하는 개념을 살펴보았습니다. try-catch 블록에서 여러 예외를 발생시키거나, 특정 예외를 다시 발생시키거나, 최고 수준의 예외 처리기를 설정하는 등의 방법으로 이를 사용할 수 있는 다른 경우도 있습니다.
위 내용은 PHP 사용자 정의 예외의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!