php中的 Try, throw 和 catch 的用法

本文简单记录一下关于php中的 Try, throw 和 catch 的用法,后面有时间再做一个详细的解析。

Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个

异常。

Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"

Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象

让我们触发一个异常:

01 <?php
02 //创建可抛出一个异常的函数
03 function checkNum($number){
04     if($number>1){
05         throw new Exception("Value must be 1 or below");
06     }
07     return true;
08 }
09 //在 "try" 代码块中触发异常
10 try{
11     checkNum(2);
12 //捕获异常
13 }catch(Exception $e){
14     echo 'Message: ' .$e->getMessage();
15 }

上面代码将获得类似这样一个错误:

Message: Value must be 1 or below

例子解释:

上面的代码抛出了一个异常,并捕获了它:

创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。

在 "try" 代码块中调用 checkNum() 函数。

checkNum() 函数中的异常被抛出

"catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。

通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息,不过,为了遵循“每个 throw 必须对应一个

catch 的原则,可以设置一个顶层的异常处理器来处理漏掉的错误。

### Try-Catch 结构中 Catch 块内抛出异常 在 `try-catch` 的结构中,可以在 `catch` 块内部重新抛出异常。这种操作通常用于以下两种场景: 1. **日志记录后再抛出**:当捕获到一个异常后,可以先对该异常进行处理(如记录日志),然后再将其抛出以便更高层的代码能够继续处理该异常。 2. **转换异常类型**:有时需要将一种类型的异常转化为另一种类型的异常再抛出,这有助于更清晰地表达业务逻辑。 以下是具体的实现方法示例代码: #### Java 中的用法 在 Java 中,可以通过 `throw` 关键字再次抛出当前捕获的异常对象或者一个新的异常对象[^2]。 ```java public void exampleMethod() { try { // 可能会抛出异常的代码 riskyOperation(); } catch (Exception e) { // 记录日志或其他预处理工作 System.err.println("An error occurred: " + e.getMessage()); // 将原始异常重新抛出 throw e; } } ``` 如果希望改变异常类型,则可以创建新的异常实例并抛出它: ```java public void exampleMethodWithConversion() throws CustomException { try { // 风险操作 riskyOperation(); } catch (IOException ioe) { // 转换为自定义异常 throw new CustomException("IO Exception encountered", ioe); } } ``` #### PHP 中的用法 同样地,在 PHP 中也可以通过 `throw` 来重抛异常[^4]。例如: ```php function processFile($filePath) { try { $fileContent = file_get_contents($filePath); // 这里可能会引发警告或错误 if ($fileContent === false) { throw new Exception('Failed to read the file.'); } echo 'File processed successfully.'; } catch (Exception $e) { // 执行某些清理动作... error_log('Error while processing file: ' . $e->getMessage()); // 再次抛出异常给调用者 throw $e; } } ``` 另外还可以修改异常类型来适应不同的上下文需求: ```php function convertAndThrow() { try { someRiskyFunctionality(); } catch (\RuntimeException $runtimeExcepion) { // 创建新异常并将原因为参数传递进去 throw new \DomainException( 'Runtime issue detected', 0, $runtimeExcepion ); } } ``` 以上展示了如何在不同语言环境下于 `catch` 块中正确地抛出异常及其适用场合[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值