>  기사  >  백엔드 개발  >  PHP 사용자 정의 예외

PHP 사용자 정의 예외

WBOY
WBOY원래의
2024-08-29 13:06:10429검색

오류가 발생하면 스크립트의 정상적인 흐름이 중단되고 예외를 사용하여 이를 변경할 수 있습니다. 사용자는 PHP 코드베이스에 이미 내장된 예외 클래스를 확장하여 라이브러리, 회사 또는 애플리케이션의 요구 사항에 따라 예외를 사용자 정의할 수 있습니다. 여기서는 내장 예외 클래스에서 가져오는 하위 클래스의 범위 내에 있는 속성과 멤버를 볼 수 있습니다.

광고 이 카테고리에서 인기 있는 강좌 PHP 개발자 - 전문 분야 | 8개 코스 시리즈 | 3가지 모의고사

무료 소프트웨어 개발 과정 시작

웹 개발, 프로그래밍 언어, 소프트웨어 테스팅 등

예외가 발생하면 다음과 같은 일이 발생합니다.

  • 현재 코드 상태가 먼저 저장됩니다.
  • 예외 핸들러는 저장된 코드 상태에서 계속 실행하거나, 실행을 종료하거나, 코드의 다른 위치에서 실행을 계속합니다.

기본 제공 예외와 별도로 특정 예외를 사용자 정의해야 하는 이유를 알려주세요.

  • 코드 계층 구조에서 어떤 클래스, 확장자 또는 문자열이 예외를 생성하는지 정확하게 쉽게 알아볼 수 있습니다.
  • 이를 사용하면 개발자는 코드에서 문제를 쉽게 발견할 수 있습니다.
  • DOM, PDO 등과 같은 특정 라이브러리 예외를 브랜딩하는 데 사용할 수 있습니다.
  • 필요한 만큼 사용자 정의 예외를 구성할 수 있습니다.

PHP 사용자 정의 예외 구문

사용자 정의 예외를 발생시키려면 이미 내장된 Exception 클래스에서 다른 클래스를 확장하면 됩니다.

namespace CustExcep;
class CustException extends \Exception { }

이제 위의 CustException 클래스가 생성되었으므로 아래와 같이 사용자 정의 예외를 발생시킬 수 있습니다.

throw new \CustExcep\CustException('Insert an Exception message here');

필요에 따라 이를 사용자 정의하여 파일, 코드, 줄 및 해당 메시지와 같은 특정 클래스 속성을 재정의하거나 __toString() 메서드를 사용하여 이 예외 메시지를 작업해야 하는 형식으로 강제 설정할 수도 있습니다.

PHP에서 사용자 정의 함수 작업

몇 가지 예를 통해 이 기능의 작동을 살펴보겠습니다.

예시 #1

코드:

<?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 사용자 정의 예외

설명:

  • 이 예에서는 예외를 사용자 정의하는 방법을 살펴보겠습니다. 이를 위해 먼저 이 목적을 위한 클래스를 정의하고, 여기서는 선택 사항이 아닌 생성자를 사용하여 예외 메시지를 재정의합니다. 예외 메시지를 일부 기본 텍스트로 설정했습니다. 여기서는 사용 중인 모든 매개변수가 올바르게 할당되었는지 확인해야 합니다. 이로 인해 오류가 발생합니다. 그런 다음 custFunc()라는 또 다른 함수를 생성하고 여기에 사용자 정의 예외 메시지를 정의합니다.
  • switch 문을 사용하여 이 3개의 값에 대해 3개의 서로 다른 사용자 정의 예외를 정의하고 있으며, 기본 경우에는 예외가 발생하지 않고 필요한 개체가 생성됩니다.
  • 이를 시도하기 위해 값을 CUST_EXCEPTION으로 전달하여 새 객체를 생성하려고 합니다. 여기에서는 처음에 정의된 custFunc() 메서드를 호출합니다. 따라서 정의된 예외 메시지를 가져와서 동일한 내용을 표시합니다.

예시 #2

코드:

<?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();
}
?>

출력:

PHP 사용자 정의 예외

설명:

  • 이 메시지에서는 적절한 오류를 발생시키는 줄 번호도 얻습니다. 비밀번호 값을 입력한 후 VALIDATE_PWD와 비교합니다. 이것이 true를 반환하면 예외가 발생하지 않습니다. 결과가 거짓이면 사용자 정의 예외가 발생합니다.

PHP Custom Exception의 장점

장점은 아래와 같습니다.

  • 내장된 예외도 좋지만 개발자의 관점에서는 사용자 정의 예외가 더 중요합니다. 개발자가 원하는 곳 어디에서나 예외를 타겟팅하고 포착할 수 있기 때문입니다.
  • 개발자가 여러 지점에서 사용자 정의 예외를 정의하고 이를 처리할 수 있으므로 디버깅이 쉽습니다.
  • 기존 Exception 클래스를 쉽게 수정할 수 있고, 확장을 통해 더욱 효율적으로 사용할 수 있습니다.
  • '잡히지 않는' 예외를 잡는 데 유용합니다.

결론

이 글에서는 예외를 사용자 정의하고 처리하는 개념을 살펴보았습니다. try-catch 블록에서 여러 예외를 발생시키거나, 특정 예외를 다시 발생시키거나, 최고 수준의 예외 처리기를 설정하는 등의 방법으로 이를 사용할 수 있는 다른 경우도 있습니다.

위 내용은 PHP 사용자 정의 예외의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:PHP 최종 수업다음 기사:PHP 최종 수업