PHP异常处理之抛出一个异常

从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被执行。

既然抛出异常会中断程序执行,那么为什么还需要使用异常处理?

异常抛出被用于在遇到未知错误,或者不符合预先设定的条件时,通知客户程序,以便进行其他相关处理,不至于使程序直接报错中断。

当代码中使用了try catch的时候,抛出的异常会在catch中捕获,否则会直接中断。

1、基本语法 try{ //可能出现错误或异常的代码 //catch表示捕获,Exception是php已定义好的异常类 } catch(Exception $e){ //对异常处理,方法: //1、自己处理 //2、不处理,将其再次抛出 }2、处理处理程序应当包括:Try - 使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。Throw - 这里规定如何触发异常。注意:每一个 "throw" 必须对应至少一个 "catch",当然可以对应多个"catch"Catch - "catch" 代码块会捕获异常,并创建一个包含异常信息的对象。

//创建可抛出一个异常的函数
function checkNum($number){
    if($number>1){
        throw new Exception("异常提示-数字必须小于等于1");
    }
    return true;
} //在 "try" 代码块中触发异常
try{
    checkNum(2);
    //如果异常被抛出,那么下面一行代码将不会被输出
    echo '如果能看到这个提示,说明你的数字小于等于1';
}catch(Exception $e){
    //捕获异常
    echo '捕获异常: ' .$e->getMessage();
}

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

捕获异常:: 异常提示-数字必须小于等于1

例子解释:

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

创建 checkNum() 函数。它检测数字是否大于 1。如果是,则抛出一个异常。在 "try" 代码块中调用 checkNum() 函数。checkNum() 函数中的异常被抛出"catch" 代码块接收到该异常,并创建一个包含异常信息的对象 ($e)。通过从这个 exception 对象调用 $e->getMessage(),输出来自该异常的错误消息

PHP异常处理之异常处理类

PHP具有很多异常处理类,其中Exception是所有异常处理的基类。

Exception具有几个基本属性与方法,其中包括了:

message 异常消息内容code 异常代码file 抛出异常的文件名line 抛出异常在该文件的行数

其中常用的方法有:

getTrace 获取异常追踪信息getTraceAsString 获取异常追踪信息的字符串getMessage 获取出错信息

如果必要的话,可以通过继承Exception类来建立自定义的异常处理类。

//自定义的异常类,继承了PHP的异常基类Exception
class MyException extends Exception {
  function getInfo() {
      return '自定义错误信息';
  }
}

try {
  //使用异常的函数应该位于 "try" 代码块内。如果没有触发异常,则代码将照常继续执行。但是如果异常被触发,会抛出一个异常。
  throw new MyException('error');//这里规定如何触发异常。注意:每一个 "throw" 必须对应至少一个 "catch",当然可以对应多个"catch"
} catch(Exception $e) {//"catch" 代码块会捕获异常,并创建一个包含异常信息的对象
  echo $e->getInfo();//获取自定义的异常信息
  echo $e->getMessage();//获取继承自基类的getMessage信息
}

PHP异常处理之获取错误发生的所在行

在异常被捕获之后,我们可以通过异常处理对象获取其中的异常信息,前面我们已经了解捕获方式,以及获取基本的错误信息。

在实际应用中,我们通常会获取足够多的异常信息,然后写入到错误日志中。

通过我们需要将报错的文件名、行号、错误信息、异常追踪信息等记录到日志中,以便调试与修复问题。

<?php
try {
  throw new Exception('wrong');
} catch(Exception $ex) {
  $msg = 'Error:'.$ex->getMessage()."\n";
  $msg.= $ex->getTraceAsString()."\n";
  $msg.= '异常行号:'.$ex->getLine()."\n";
  $msg.= '所在文件:'.$ex->getFile()."\n";
  //将异常信息记录到日志中
PHP异常处理之   file_put_contents('error.log', $msg);
}

php学习----异常处理(接上篇)的更多相关文章

  1. WCF技术剖析之二十一: WCF基本的异常处理模式[上篇]

    原文:WCF技术剖析之二十一: WCF基本的异常处理模式[上篇] 由于WCF采用.NET托管语言(C#和NET)作为其主要的编程语言,注定以了基于WCF的编程方式不可能很复杂.同时,WCF设计的一个目 ...

  2. Numpy学习笔记(上篇)

    目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...

  3. canvas学习笔记(上篇)-- canvas入门教程 -- canvas标签/方块/描边/路径/圆形/曲线

    [上篇] -- 建议学习时间4小时  课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...

  4. python学习-异常处理

    小技巧 isinstance(obj,foo) 检查是否obj是否是类 foo 的对象 class Foo(object): pass obj = Foo() isinstance(obj, Foo) ...

  5. SpringMVC 学习-异常处理 SimpleMappingExceptionResolver 类

    Spring3.0 对异常的处理方式总共有两种: 一种是使用 HandlerExceptionResolver 接口,并且 Spring 已经提供默认的实现类 SimpleMappingExcepti ...

  6. python 学习 异常处理

    异常处理实例 while True: num1 = input('num1:') num2 = input('num2:') try: num1 = int(num1) num2 = int(num2 ...

  7. ThreadPoolExcutor 线程池 异常处理 (上篇)

    前言 最近看到crossoverJie的一篇文章:一个线程罢工的诡异事件 首先感谢原作者的分享,自己获益匪浅.然后是回想到自己的一次面试经历,面试官提问了线程池中的线程出现了异常该怎样捕获?会导致什么 ...

  8. java struts2入门学习---异常处理和类型转换

    一.struts2对异常的处理 1.自定义局部异常: <action> <exception-mapping result="sonException" exce ...

  9. Java学习---异常处理的学习

    基础知识 任何一门计算机程序设计语言都包括有绝对正确和相对正确的语句.绝对正确: 指任何情况下, 程序都会按照流程正确执行:相对正确: 程序的运行受到运行环境的制约, 在这种情况下, 需要附加检测和控 ...

随机推荐

  1. Linux 命令 —— iconv 转换编码

    iconv 是 Linux 系统自带的用于转换文件编码的命令行工具. 命令参数 使用 iconv --help 命令查看命令帮助信息: 用法: iconv [OPTION...] [-f ENCODI ...

  2. MySQL中间件之ProxySQL(8):SQL语句的重写规则

    返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.为什么要重写SQL语句 ProxySQL在收到前端发送来的SQL语 ...

  3. Python字典小结

      字典(dict)结构是Python中常用的数据结构,笔者结合自己的实际使用经验,对字典方面的相关知识做个小结,希望能对读者一些启发~ 创建字典   常见的字典创建方法就是先建立一个空字典,然后逐一 ...

  4. NET(C#)接入Dubbo服务,Zookeeper作为Dubbo服务的注册中心,实现thrift协议访问接口(3)

    如何引用Zookeeper.dll 下载最新版本的Zookeeper 地址:http://mirrors.cnnic.cn/apache/zookeeper/ 没有.NET代码 dotnet代码下载 ...

  5. PHP学习笔记(3)-Zend Studio安装和汉化

    下载 因为FQ也慢,所以还是在百度软件中心下载快一些.地址:http://rj.baidu.com/soft/detail/15423.html?ald 因为下载不是最新版本,虽然因为强迫症FQ在官网 ...

  6. Git Extensions 和 Tortoisegit 到底是什么?Git For VS(Git For Visual Studio)(Visual Studio 中使用 Git)

    前言: 我们使用 Git 作为版本控制的朋友们,一定都熟悉 Git Extensions 和 Tortoisegit 两款工具,但是对于初学者,可能就不那么了解了. 当然如果有幸,你接触过 SVN , ...

  7. ASP.NET Core中的Startup类

    ASP.NET Core程序要求有一个启动类.按照惯例,启动类的名字是 "Startup" .Startup类负责配置请求管道,处理应用程序的所有请求.你可以指定在Main方法中使 ...

  8. JavaScript是如何工作的:事件循环和异步编程的崛起 + 5种使用 async/await 更好地编码方式!

    摘要: 深度理解JS事件循环!!! 原文:JavaScript是如何工作的:事件循环和异步编程的崛起+ 5种使用 async/await 更好地编码方式! 作者:前端小智 Fundebug经授权转载, ...

  9. 处理JavaScript异常的正确姿势

    译者按: 错误是无法避免的,妥善处理它才是最重要的! 原文: A Guide to Proper Error Handling in JavaScript Related Topics: 译者: Fu ...

  10. JavaScript学习备忘

    1.您只能在 HTML 输出流中使用 document.write 如果在文档已加载后使用它(比如在函数中),会覆盖整个文档 2.数组 : [40, 100, 1, 5, 25, 10] <== ...