PHP异常处理这样解决

PHP预定了两个异常类:Exception和ErrorException

Exception {
    /* 属性 */
    protected string $message ; //异常消息内容
    protected int $code ; //异常代码号
    protected string $file ; //抛出异常的文件名
    protected int $line ; //抛出异常在该文件中的行号
    /* 方法 */
    public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = null]]] )
    final public string getMessage ( void ) //异常抛出的信息
    final public Exception getPrevious ( void ) //前一异常
    final public int getCode ( void ) //异常代码,这是用户自定义的
    final public string getFile ( void ) //发生异常的文件路劲
    final public int getLine ( void ) //发生异常的行
    final public array getTrace ( void ) //异常追踪信息(array)
    final public string getTraceAsString ( void ) //异常追踪信息(string)
    public string __toString ( void ) //试图直接 将异常对象当作字符串使用时调用子函数的返回值
    final private void __clone ( void ) //克隆异常对象时调用
}
ErrorException  extends Exception  {

    /* 属性 */
    protected int $severity   ;
    /* 方法 */

    public __construct  ([ string $message  = ""  [, int $code  = 0  [, int $severity  = 1  [, string $filename  = __FILE__  [, int $lineno  = __LINE__  [, Exception  $previous  = NULL    ]]]]]] )
    final public int getSeverity  ( void )
    /* 继承的方法 */
    final public string Exception::getMessage  ( void )
    final public Exception Exception::getPrevious  ( void )
    final public int Exception::getCode  ( void )
    final public string Exception::getFile  ( void )
    final public int Exception::getLine  ( void )
    final public array Exception::getTrace  ( void )
    final public string Exception::getTraceAsString  ( void )
    public string Exception::__toString  ( void )
    final private void Exception::__clone  ( void )
}

那么如何捕获异常?
(1)PHP可用try...catch...捕获异常,进行异常处理的代码必须在try代码块内。

try {
    throw new Exception(‘exception test 1‘, 1001);
} catch(Exception $e) {
    echo $e->getMessage().‘-‘.$e->getCode();
}

(2)用户可以自定义异常处理函数[set_exception_handler],用于没用用try/catch捕获的异常。

function  exception_handler ( $e ) {
    echo  "Uncaught exception: "  ,  $e -> getMessage (),  "\n" ;
}

set_exception_handler ( ‘exception_handler‘ );

throw new  Exception ( ‘Uncaught Exception‘ );

echo "这行不会执行了";

可以看到使用ser_exception_handler回调函数处理异常,后续的代码不会继续执行,但try-catch可以。
(3)PHP可用多catch捕获不同类型异常,并允许在catch代码块内再次抛出异常。

//请根据实际扩展异常类北京kiddy|河北pvc塑胶地板
class MyException extends Exception {
    public function __construct($message = ‘‘, $code = 0) {

    }

    public function myFunction() {
        echo ‘just for test‘;
    }
}

try {
    throw new MyException(‘an error‘);
} catch (MyException $e) {
    echo $e->myFunction();
} catch (Exception $e) {
    echo $e->getMessage();
}

(4)PHP5.5已经支持finally关键词,你无需关心异常是否溢出了。

可对比如下:

function doSomething() {
    $resource = createResource();
    try {
        $result = useResource($resource);
    } catch (Exception $e) {
        releaseResource($resource);
        log($e->getMessage());
        exit();
    }
    releaseResource($resource);
    return $result;
}

//使用finally后
function doSomething2() {
    $resource = createResource();
    try {
        $result = useResource($resource);
        return $result;
    } catch (Exception $e) {
        log($e->getMessage());
        exit();
    } finally {
        releaseResource($resource);
    }
}
时间: 2024-11-06 07:09:16

PHP异常处理这样解决的相关文章

异常处理

我们在使用Java语言高级API进行程序设计之前,我们还需要理解Java语言中另一个基础特色-----异常处理 异常(Exception)是程序在执行过程中所产生的问题.导致异常产生的原因有很多种: 用户输入了无效的数据.找不到一个需要打开的文件.在通讯过程中网络连接断开或者JVM发生了内存溢出 异常的分类: 检查异常-----是用户错误或不能被程序所遇见的问题 运行时异常-----是一个程序在运行过程可能发生的问题 错误-------实际上,错误根本不是异常,但却是用户或程序所无法控制的问题

关于异常处理

异常处理为了解决返回值与指示错误之间的冲突,有时候返回值有特别含义而不仅是数值,传统方式是使用errno方式另外指出错误.异常处理可以分离这种冲突,同时也可以将错误处理从正常逻辑中剥离出来. 两种异常处理模型“终止模型”和“恢复模型”. http://baike.baidu.com/link?url=4b1jU7PZOKRahDtwJC6DryCMvQm6OFccWCixqkNxAgW0R-uTur4dco-vIUfgQuN4_IR6A5ZsAIPsprJgPR0Vnq

异常处理__try{}__except(EXCEPTION_EXECUTE_HANDLER){}

在一个函数中不能混合使用 try{}catch(CException *e){} 与 __try{}__except(EXCEPTION_EXECUTE_HANDLER){} 编译时报错 error C2713: 每个函数只允许一种异常处理方式 解决方法: 将__try__except代码单独成一个函数 void robustMemcpy() { __try { memcpy(dstMapAddress, buffer, dwBlockBytes); } __except(EXCEPTION_E

浅析CLR的异常处理模型

文章目录: 异常概述 CLR中的异常处理机制 CLR中异常的核心类System.Exception类 异常处理的设计规范和最佳实践 异常处理的性能问题 其他拓展 1.异常概述 异常我们通常指的是行动成员(例如类实例对象)没有完成所宣称的行动或任务. 例如下图中代码,返回 "Lmc"这个字符串的第二个字符的大写是否为 "M",假如这个执行过程中任何一个步骤出错,都应该返回一个状态(例如"L".Substring(1,1)会因为字符串索引不够长而出现

深入理解Java异常处理机制 (笼统篇)

开篇 1.异常处理(Exception Handling): 就是一种解决这一问题的机制,能够较好地处理程序不能正常运行的情况. 2.异常(Exception): 是程序在运行时可能出现的会导致程序运行终止的错误.这种错误是不能通过编译系统检查出来的. 3.常见异常如下: (1)系统资源不足.例如,内存不足,不可以动态申请内存空间:磁盘空间不足,不能打开新的输出文件等. (2)用户操作错误导致运算关系不正确.例如,出现分母为0.数学运算溢出,数组越界,参数类型不能转换等. 4.异常例子: 在C+

try的异常处理

一,今日内容: 错误分类:  1, 语法错误: 程序未执行之前, pychram已经做出了提示. 2, 逻辑错误: 1, 可预知: 用逻辑判断 可以解决 2, 不可预知的: 可以用异常处理来解决. 1, 异常处理: 由错误引发的, 而且出现异常就会终止程序 try的异常处理: **1, 单独一个条件, 单支. **2, 多分支 **3, 万能异常: except Exception **4, 多分支加万能 5, try except except... else 6, try except ex

智能指针auto_ptr详解

概述:C++中有很多种智能指针,auto_ptr就是其中的一种,该智能指针主要是为了解决"因程序异常退出发生的内存泄漏"这类问题的. 我们先来看下面的问题代码 #include<iostream> #include<memory> #include<exception> using namespace std; //一般指针的处理方式 template<typename T> class OldClass { public: OldCla

Python 反射机制详解

本文和大家分享的主要是python反射机制相关内容,一起来看看吧,希望对大家学习python有所帮助. 对编程语言比较熟悉的朋友,应该知道"反射"这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述python的反射机制的使用场景和核心本质. 一.前言 1 def f1():2   print("f1是这个函数的名字!")3   4 s = "f1"

MVC5+EF6--10 并发处理

近期学习MVC5+EF6,找到了Microsoft的原文,一个非常棒的系列,Getting Started with Entity Framework 6 Code First using MVC 5,网址:http://www.asp.net/mvc/overview/getting-started/getting-started-with-ef-using-mvc/creating-an-entity-framework-data-model-for-an-asp-net-mvc-appli