php中的异常
扩展PHP内置的异常处理类;可以通过实例化Exception
类或者它的子类来创建一个异常实例。
Exception::__construct
— 异常构造函数Exception::getMessage
— 获取异常消息内容Exception::getPrevious
— 返回异常链中的前一个异常Exception::getCode
— 获取异常代码Exception::getFile
— 创建异常时的程序文件名称Exception::getLine
— 获取创建的异常所在文件中的行号Exception::getTrace
— 获取异常追踪信息Exception::getTraceAsString
— 获取字符串类型的异常追踪信息Exception::__toString
— 将异常对象转换为字符串Exception::__clone
— 异常克隆
内置异常子类
Exception是所有异常类的基类、下面两个直属子类LogicException
逻辑处理异常类,和RuntimeException
运行时异常类。
php中异常处理
异常处理功能提供了处理程序运行时出现的错误或异常情况的方法。
PHP5提供了一种新的面向对象的错误处理方法。使用检测(try)
、抛出(throw)
和捕获(catch)异常
。
try
使用异常的函数应该位于”try”代码块内。如果没有出发异常,则代码将照常继续执行。如果异常被出发,会抛出一个异常。
throw
这里规定如何出发异常,每一个“throw”,必须对应至少一个”catch”.
catch
“catch”代码块会捕获异常,并创建一个包含异常信息的对象。
一个 try
至少要有一个与之对应catch
。定义个多个catch
可以捕获不同的对象.php会按这些catch
被定义的顺序执行,知道完成最后一个为止。
php异常处理语句
$e = new Exception('我是错误',2);
echo "错误信息:",$e->getMessage(),"<br/>";
echo "错误行号:",$e->getLine();
throw $e; //如果抛出异常不捕获 将会报错Fatal error: Uncaught Exceptio
<?php //正确语法
class A{
public function __construct(){
throw new Exception('错误信息');
}
}
try{
$a=new A();
echo "没有异常、我会执行";
}catch(Exception $e){
echo '在文件',$e->getFile(),'中的第',$e->getLine(),'行,中产生异常信息:',$e->getMessage();
}
多个catch捕获不同的异常
<?php
class A{
public function __construct(){
$i=mt_rand(0,5);
if($i>2){
throw new OutOfBoundsException('这是一个异常错误',2);
}else{
throw new OutOfBoundsException('这是数组越界异常',3);
}
}
}
try{
$a=new A();
echo "没有异常、我会执行";
}catch(OutOfBoundsException $e){
echo '在文件',$e->getFile(),'中的第',$e->getLine(),'行,产生异常信息:',$e->getMessage();
}catch(Exception $e){
echo "这是普通异常:",$e->getMessage();
}
嵌套try{}catch(){}异常
<?php
class A{
public function __construct(){
$i=mt_rand(0,10);
if($i>2 && $i<5){
throw new OutOfBoundsException('这是一个异常错误',2);
}elseif($i<2){
throw new OutOfBoundsException('这是数组越界异常',3);
}
}
}
try{
$a=new A();
echo "没有异常、我会执行<br/>";
try{
throw new RangeException('这是新的异常',5);
}catch (Exception $ee){
echo $ee->getMessage();
}
}catch(OutOfBoundsException $e){
echo '在文件',$e->getFile(),'中的第',$e->getLine(),'行,产生异常信息:',$e->getMessage();
}catch(Exception $e){
echo "这是普通异常:",$e->getMessage();
}
自定义异常注意事项
自定义异常必须继承自Exception 类或者它的子类。
自定义的异常需要重新定义构造函数的话,建议同时掉用parnet::__construct()
来检查所有的变量是否已被赋值。
当对象要输出字符串的时候,可以重载__toString()
并自定义输出的样式。
<?php
class MyException extends Exception {
public function __construct($msg,$code){
//如果重写异常类方法、构造函数 需要传递变量、不然调用方法没有参数
parent::__construct($msg,$code);
}
public function __toString()
{
return "这是自定义异常类:".__CLASS__."<br/>";
}
}
try{
throw new MyException("这是我自定义的异常",2);
echo "没有异常、我会执行<br/>";
}catch(MyException $e){
echo '在文件',$e->getFile(),'中的第',$e->getLine(),'行,产生异常信息:',$e->getMessage();
echo "<br/>",$e;
}
设置顶层异常处理器
set_exception_handler()
函数可以设置处理所有为捕获异常的用户定义函数。
<?php
class MyException extends Exception {
}
//设置顶层处理异常函数
function my_exception_handler(Exception $e){
echo $e->getMessage(),"<br/>";
}
set_exception_handler('my_exception_handler');
class Test{
function __construct()
{
throw new MyException('我是异常在TEST里面',3);
}
}
$t= new Test();