当发生错误时,脚本的正常流程会停止,并且可以使用异常来更改错误。用户可以通过扩展 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中文网其他相关文章!