首页 php教程 php手册 php中try catch 捕获异常的例

php中try catch 捕获异常的例

May 26, 2016 am 08:21 AM
catch php try

php中try catch可以帮助我们捕获程序代码的异常了,这样我们可以很好的处理一些不必要的错误了,下面本文章总结了捕获异常的一些用法例子.

PHP中try{}catch{}语句.

PHP 5 添加了类似于其它语言的异常处理模块,在 PHP 代码中所产生的异常可被 throw语句抛出并被 catch 语句捕获,注,一定要先抛才能获取.

需要进行异常处理的代码都必须放入 try 代码块内,以便捕获可能存在的异常,每一个 try 至少要有一个与之对应的 catch.

使用多个 catch可以捕获不同的类所产生的异常,当 try 代码块不再抛出异常或者找不到 catch 能匹配所抛出的异常时,PHP 代码就会在跳转到最后一个 catch 的后面继续执行.

当然,PHP允许在 catch 代码块内再次抛出(throw)异常,当一个异常被抛出时,其后(译者注:指抛出异常时所在的代码块)的代码将不会继续执行,而 PHP 就会尝试查找第一个能与之匹配的 catch.

如果一个异常没有被捕获,而且又没用使用 set_exception_handler() 作相应的处理的话,那么 PHP 将会产生一个严重的错误,并且输出 Uncaught Exception ...(未捕获异常)的提示信息.

先来看一下PHP内置异常类的基本属性和方法,不包括具体实现,代码如下:

try{ 
} 
catch(){ 
throw new Exception(); 
} 
catch(){ 
//这里可以捕获到前面一个块抛出的Exception 
}
登录后复制

为了进一步处理异常,我们需要使用PHP中try{}catch{}----包括Try语句和至少一个的catch语句,任何调用可能抛出异常的方法的代码都应该使用try语句,Catch语句用来处理可能抛出的异常,以下显示了我们处理getCommandObject()抛出的异常的方法,代码如下:

<?php    
try {    
$mgr = new CommandManager();    
$cmd = $mgr->getCommandObject("realcommand");    
$cmd->execute();    
} catch (Exception $e) {    
print $e->getMessage();    
exit();    
}
登录后复制

可以看到,通过结合使用throw关键字和PHP中try{}catch{},我们可以避免错误标记“污染”类方法返回的值,因为“异常”本身就是一种与其它任何对象不同的PHP内建的类型,不会产生混淆.

如果抛出了一个异常,try语句中的脚本将会停止执行,然后马上转向执行catch语句中的脚本.

例子如下,包含文件错误抛出异常,代码如下:

<?php 
// 错误的演示 
try { 
require (&#39;test_try_catch.php&#39;); 
} catch (Exception $e) { 
echo $e->getMessage(); 
} 
 
// 正确的抛出异常 
try { 
if (file_exists(&#39;test_try_catch.php&#39;)) { 
require (&#39;test_try_catch.php&#39;); 
} else { 
throw new Exception(&#39;file is not exists&#39;); 
} 
} catch (Exception $e) { 
echo $e->getMessage(); 
}
登录后复制

如果异常抛出了却没有被捕捉到,就会产生一个fatal error.

多个catch捕获多个异常

PHP将查询一个匹配的catch代码块,如果有多个catch代码块,传递给每一个catch代码块的对象必须具有不同类型,这样PHP可以找到需要进入哪一个catch代码块,当try代码块不再抛出异常或者找不到catch能匹配所抛出的异常时,PHP代码就会在跳转最后一个catch的后面继续执行,多个异常的捕获的示例如下,代码如下:

<?php  
class MyException extends Exception{ 
       //重定义构造器使第一个参数message变为必须被指定的属性 
       public function __construct($message, $code=0){ 
           //可以在这里定义一些自己的代码 
           //建议同时调用parent::construct()来检查所有的变量是否已被赋值 
           parent::__construct($message, $code); 
       } 
       //重写父类中继承过来的方法,自定义字符串输出的样式 
       public function __toString(){ 
           return __CLASS__.":[".$this->code."]:".$this->message."<br>"; 
       } 
       //为这个异常自定义一个处理方法 
       public function customFunction(){ 
           echo "按自定义的方法处理出现的这个类型的异常"; 
       } 
} 
//创建一个用于测试自定义扩展的异常类MyException 
class TestException{ 
    public $var;           //用来判断对象是否创建成功的成员属性 
    function __construct($value=0){              //通过构造方法的传值决定抛出的异常 
        switch($value){                          //对传入的值进行选择性的判断 
            case 1:                              //掺入参数1,则抛出自定义的异常对象 
                throw new MyException("传入的值\"1\"是一个无效的参数",5);break; 
            case 2:                              //传入参数2,则抛出PHP内置的异常对象 
                throw new MyException("传入的值\"2\"不允许作为一个参数",6);break; 
            default:                             //传入参数合法,则不抛出异常 
                $this->var=$value;break;          //为对象中的成员属性赋值 
        } 
    } 
}
登录后复制

//示例1,在没有异常时,程序正常执行,try中的代码全部执行并不会执行任何catch区块

try{ 
    $testObj =new TestException();           //使用默认参数创建异常的擦拭类对象 
    echo "********<br>";                     //没有抛出异常这条语句就会正常执行 
}catch(MyException $e){                      //捕获用户自定义的异常区块 
    echo "捕获自定义的异常:$e<br>";          //按自定义的方式输出异常消息 
    $e->customFunction();                    //可以调用自定义的异常处理方法 
}catch(Exception $e){                        //捕获PHP内置的异常处理类的对象 
    echo "捕获默认的异常:".$e->getMessage()."<br>";       //输出异常消息 
} 
var_dump($testObj);        //判断对象是否创建成功,如果没有任何异常,则创建成功 
//示例2,抛出自定义的异常,并通过自定义的异常处理类捕获这个异常并处理 
try{ 
    $testObj1 =new TestException(1);         //传1时,抛出自定义异常 
    echo "********<br>";                     //这个语句不会被执行 
}catch(MyException $e){                      //这个catch区块中的代码将被执行 
    echo "捕获自定义的异常:$e<br>";           
    $e->customFunction();                     
}catch(Exception $e){                        //这个catch区块不会执行 
    echo "捕获默认的异常:".$e->getMessage()."<br>";        
} 
var_dump($testObj1);        //有异常产生,这个对象没有创建成功
登录后复制

//示例2,抛出自内置的异常,并通过自定义的异常处理类捕获这个异常并处理

try{ 
    $testObj2 =new TestException(2);         //传入2时,抛出内置异常 
    echo "********<br>";                     //这个语句不会被执行 
}catch(MyException $e){                      //这个catch区块中的代码将被执行 
    echo "捕获自定义的异常:$e<br>";           
    $e->customFunction();                     
}catch(Exception $e){                        //这个catch区块不会执行 
    echo "捕获默认的异常:".$e->getMessage()."<br>";        
} 
var_dump($testObj2);        //有异常产生,这个对象没有创建成功
登录后复制

在上面的代码中,可以使用两个异常处理类:一个是自定义的异常处理类MyException;另一个则是PHP中内置的异常处理类Exception,分别在try区块中创建测试类TestException的对象,并根据构造方法中提供的不同数字参数,抛出自定义异常类对象、内置的异常类对象和不抛出任何异常的情况,跳转到对应的catch区块中执行,如果没有异常发生,则不会进入任何一个catch块中执行,测试类TestException的对象创建成功.


教程地址:

欢迎转载!但请带上文章地址^^

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1677
14
CakePHP 教程
1430
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
PHP和Python:解释了不同的范例 PHP和Python:解释了不同的范例 Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP的目的:构建动态网站 PHP的目的:构建动态网站 Apr 15, 2025 am 12:18 AM

PHP用于构建动态网站,其核心功能包括:1.生成动态内容,通过与数据库对接实时生成网页;2.处理用户交互和表单提交,验证输入并响应操作;3.管理会话和用户认证,提供个性化体验;4.优化性能和遵循最佳实践,提升网站效率和安全性。

在PHP和Python之间进行选择:指南 在PHP和Python之间进行选择:指南 Apr 18, 2025 am 12:24 AM

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP和Python:深入了解他们的历史 PHP和Python:深入了解他们的历史 Apr 18, 2025 am 12:25 AM

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

为什么要使用PHP?解释的优点和好处 为什么要使用PHP?解释的优点和好处 Apr 16, 2025 am 12:16 AM

PHP的核心优势包括易于学习、强大的web开发支持、丰富的库和框架、高性能和可扩展性、跨平台兼容性以及成本效益高。1)易于学习和使用,适合初学者;2)与web服务器集成好,支持多种数据库;3)拥有如Laravel等强大框架;4)通过优化可实现高性能;5)支持多种操作系统;6)开源,降低开发成本。

PHP的影响:网络开发及以后 PHP的影响:网络开发及以后 Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP与Python:用例和应用程序 PHP与Python:用例和应用程序 Apr 17, 2025 am 12:23 AM

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。

继续使用PHP:耐力的原因 继续使用PHP:耐力的原因 Apr 19, 2025 am 12:23 AM

PHP仍然流行的原因是其易用性、灵活性和强大的生态系统。1)易用性和简单语法使其成为初学者的首选。2)与web开发紧密结合,处理HTTP请求和数据库交互出色。3)庞大的生态系统提供了丰富的工具和库。4)活跃的社区和开源性质使其适应新需求和技术趋势。

See all articles