解析PHP中Exception异常机制

异常的基本使用

当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块。
如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息。
让我们尝试抛出一个异常,同时不去捕获它:

<?php
//create function with an exception
function checkNum($number)
 {
 if($number>1)
  {
  throw new Exception("Value must be 1 or below");
  }
 return true;
 }

//trigger exception
checkNum(2);
?>

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

PHP Fatal error:  Uncaught exception 'Exception' with message 'Value must be 1 or below' in /home/wangkongming/babytree/test/php/php_ob/3.php:7
Stack trace:
#0 /home/wangkongming/babytree/test/php/php_ob/3.php(12): checkNum(2)
#1 {main}
  thrown in /home/wangkongming/babytree/test/php/php_ob/3.php on line 7

Try, throw 和 catch

要避免上面例子出现的错误,我们需要创建适当的代码来处理异常。
正确的处理程序应当包括:
Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
Throw - 这里规定如何触发异常。每一个 "throw" 必须对应至少一个 "catch"
Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象
让我们触发一个异常:

<?php
//create function with an exception
function checkNum($number)
 {
 if($number>1)
  {
      throw new Exception("Value must be 1 or below");
  }
 return true;
 }   

//trigger exception
try{
    checkNum(2);
    echo "If you see this ,the number is 1 or below";
}catch(Exception $e) {
    echo 'Message: '.$e -> getMessage();
}
?> 

运行上面的代码:

Message: Value must be 1 or below

例子解释:

上面的代码抛出了一个异常,并捕获了它:
创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。
在 "try" 代码块中调用 checkNum() 函数。
checkNum() 函数中的异常被抛出
"catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。
通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息
不过,为了遵循“每个 throw 必须对应一个 catch”的原则,可以设置一个顶层的异常处理器来处理漏掉的错误。

到此这篇关于解析PHP中Exception异常机制的文章就介绍到这了,更多相关PHP中Exception异常内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • laravel 5异常错误:FatalErrorException in Handler.php line 38的解决

    前言 本文主要给大家介绍了关于laravel5异常错误FatalErrorException in Handler.php line 38的解决,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍. 1.错误提示 FatalErrorException in Handler.php line 38: Uncaught TypeError: Argument 1 passed to App\Exceptions\Handler::report() must be an instance of

  • PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception

    使用异常 PHP5 增加了类似其他语言的异常处理模块.在PHP代码中所产生的异常可被 throw 语句抛出并被 catch 语句捕获.需要进行异常处理的代码都必须放入到 try 代码块内,以便捕获可能存在的异常.每个try至少对应一个 catch 块.使用多个 catch 可以捕获不同的类所产生的异常.当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行.当然,PHP 允许在 catch 代码块内再次抛出(thr

  • PHP异常处理Exception类

    异常(Exception)用于在指定的错误发生时改变脚本的正常流程. 什么是异常? PHP 5 提供了一种新的面向对象的错误处理方法. 异常处理用于在指定的错误(异常)情况发生时改变脚本的正常流程.这种情况称为异常. 当异常被触发时,通常会发生: 当前代码状态被保存 代码执行被切换到预定义的异常处理器函数 根据情况,处理器也许会从保存的代码状态重新开始执行代码,终止脚本执行,或从代码中另外的位置继续执行脚本 我们将展示不同的错误处理方法: 异常的基本使用 创建自定义的异常处理器 多个异常 重新抛

  • PHP的异常处理类Exception的使用及说明

    1.首先php5提供了基本的异常处理类,可直接使用 复制代码 代码如下: <?php class Exception { protected $message = 'Unknown exception'; // 异常信息 protected $code = 0; // 用户自定义异常代码 protected $file; // 发生异常的文件名 protected $line; // 发生异常的代码行号 function __construct($message = null, $code =

  • 解析PHP中Exception异常机制

    异常的基本使用 当异常被抛出时,其后的代码不会继续执行,PHP 会尝试查找匹配的 "catch" 代码块. 如果异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么将发生一个严重的错误(致命错误),并且输出 "Uncaught Exception" (未捕获异常)的错误消息. 让我们尝试抛出一个异常,同时不去捕获它: <?php //create function with an exception funct

  • 详解Java的Exception异常机制

    一.前言 在Java中,我们在执行代码的过程中难免会遇到错误与Exception异常,可是我们一直都是锤头Coding而忽略了学习Exception这个东西!我们只是知道在发生Exception的地方让代码自动生成throw exception或者是使用try-catch括起来处理,那你了解Java的Exception吗?今天就让我们把一起来看看Java的Exception吧! 在Java中,我们的代码再出现错误的时候无非是两种情况:一是Error,一是异常Exception.如果是Error,

  • 深入解析PHP中SESSION反序列化机制

    简介 在php.ini中存在三项配置项: session.save_path=""   --设置session的存储路径 session.save_handler="" --设定用户自定义存储函数,如果想使用PHP内置会话存储机制之外的可以使用本函数(数据库等方式) session.auto_start   boolen --指定会话模块是否在请求开始时启动一个会话,默认为0不启动 session.serialize_handler   string --定义用来序

  • Java中的异常和处理机制实例详解

    本文实例讲述了Java中的异常和处理机制.分享给大家供大家参考,具体如下: 简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?. Java提供了更加优秀的解决办法:异常处理机制. 异常处理机制能让程序在异常发生时,按照代码的预先设定的异常处理逻辑,针对性地处理异常,让程序尽最大可能恢复正常并继续执行,且保持代码的清晰. Java中的异常可以是函数中的

  • C++中异常机制的实现机制详解

    前言 异常就是运行时出现出现的不正常(没说一样),例如系统运行时耗尽了内存或遇到意外的非法输入.本文详细介绍了关于C++中异常机制实现机制的相关内容,下面话不多说了,来一起看看详细的介绍吧. 1.C函数的调用和返回 要理解C++异常机制实现之前,首先要了解一个函数的调用和返回机制,这里面就要涉及到ESP和EBP寄存器.我们先看一下函数调用和返回的流程. 下面是按调用约定__stdcall 调用函数test(int p1,int p2)的汇编代码 假设执行函数前堆栈指针ESP为NN push p2

  • PHP中的异常及其处理机制

    目录 什么是异常? 总结 上回文章中我们讲到了错误是编译和语法运行时会出现的,它们与逻辑无关,是程序员在码代码时不应该出现的,也就是说,这些错误应该是尽量避免带到线上环境的,他们不能通过try...catch捕获到.而异常则正好相反. 什么是异常? 异常,指的是程序运行中出现的不符合预期的情况,通常允许它发生,并交由相应的异常处理来进行处理.当然,你也可以选择忽略掉异常的处理,但是就像严重错误一样,代码马上会终止运行.异常属于业务逻辑上的错误,基本上是我们人为的. 还是先通过一个简单的代码看下异

  • Java 异常机制Exception和自定义异常

    目录 异常机制 异常体系结构 异常的捕获与抛出 自定义异常 异常机制 异常:就是不符合实际需求,在实际中可能不存在也可能不满足实际,所以出现的问题称之为异常. 异常的三种类型: 检查性异常:用户错误或问题引起的异常,是程序员无法预见的.例如打开一个不存在的文件,就会发生一个检查性异常. 运行时异常:是可能被程序员避免的异常,与检查性异常相反,运行时异常可以在编译是被忽略. 错误(ERROR):错误不是异常!错误是脱离了程序员的问题.一般不是程序员的问题. 异常体系结构 Java当中,万物皆对象,

  • 解析Java中未被捕获的异常以及try语句的嵌套使用

    Java未被捕获的异常 在你学习在程序中处理异常之前,看一看如果你不处理它们会有什么情况发生是很有好处的.下面的小程序包括一个故意导致被零除错误的表达式. class Exc0 { public static void main(String args[]) { int d = 0; int a = 42 / d; } } 当Java运行时系统检查到被零除的情况,它构造一个新的异常对象然后抛出该异常.这导致Exc0的执行停止,因为一旦一个异常被抛出,它必须被一个异常处理程序捕获并且被立即处理.该

  • 深入解析NumPy中的Broadcasting广播机制

    前言 在吴恩达老师的深度学习专项课程中,老师有提到NumPy中的广播机制,同时那一周的测验也有涉及到广播机制的题目.那么,到底什么是NumPy中的广播机制? 官方文档 接下来到了看官方文档的时间. Array Broadcasting in Numpy 广播机制概述 让我们探索numpy中一个更高级的概念,这个概念被称为广播. 广播展现了NumPy在算术运算期间是如何处理具有不同形状的数组的. 受到某些约束,较小的阵列将在较大的阵列上"广播",以使它们具有相同形状. 广播提供了一种数组

  • php中的异常和错误浅析

    本文主要介绍了php中的异常和错误,分享给大家供大家参考学习,下面来一起看看详细的介绍: 一.异常与错误 异常是指程序运行中不符合预期情况以及与正常流程不同的状况.错误则属于自身问题,是一种非法语法或者环境问题导致的.让编译器无法通过检查设置无法运行的情况. 由于php最开始是没有异常处理,后来为了进军企业级开发,模仿java等语言,推出了异常.导致php中遇到任何自身错误都会触发一个错误,而不是抛出一个异常(某些情况下,会同时抛出错误和异常).PHP一旦遇到非正常代码,大多数情况下,都是直接抛

随机推荐