php异常处理面向对象和面向函数使用
要使用异常,首先得知道那些部分会产生异常,产生什么类型异常(php常见异常见下方符表),对产生的异常该怎么办。
如果知道程序的那些部分会产生异常,那么就对这一部分使用try关键字;
如果知道了产生异常的部分产生的是什么类型的异常,那么就可以使用throw关键字抛出这个异常类的实例,要是不知道是什么类型的异常,那就用基类Exception。
当知道了程序会产生什么类型的异常,也抛出了异常,最后就可以使用catch关键字捕获并处理异常。
首先用面向对象的方法来实现上面的思路。
这里捕捉的是PDO类异常:
<?php
try{
$dsn = 'mysql:127.0.0.1;db_name=user';
$pdo = new PDO( $dsn, 'roo', 'root' );
// 自己写的代码不需要抛出PDO异常实例
}catch( PDOException $e ){
// 获得异常信息
echo '异常信息:'.$e ->getMessage().PHP_EOL,
'异常编号:'.$e ->getCode().PHP_EOL,
'异常行号:'.$e ->getLine().PHP_EOL,
'异常文件:'.$e ->getFile().PHP_EOL;
}
异常信息:SQLSTATE[HY000] [1045] Access denied for user 'roo'@'localhost' (using password: YES)
异常编号:1045
异常行号:4
异常文件:D:\workspace\project_shop\test.php
使用所有异常类的基类,Exception类。
<?php
try{
$a;
throw new Exception( '变量没有定义!', 250 );
}catch( Exception $e ){
// 处理异常
echo '异常信息:'.$e ->getMessage().PHP_EOL,
'异常编号:'.$e ->getCode().PHP_EOL,
'异常行号:'.$e ->getLine().PHP_EOL,
'异常文件:'.$e ->getFile().PHP_EOL;
}
异常信息:变量没有定义!
异常编号:250
异常行号:4
异常文件:D:\workspace\project_shop\test.php
自定义异常类,MyException类
<?php
class MyException1 extends Exception {
public function show_exception_info(){
echo '异常信息:'.$this ->getMessage().PHP_EOL,
'异常编号:'.$this ->getCode().PHP_EOL,
'异常行号:'.$this ->getLine().PHP_EOL,
'异常文件:'.$this ->getFile().PHP_EOL;
}
}
class MyException2 extends Exception {
public function show_exception_info(){
echo '异常信息:'.$this ->getMessage().PHP_EOL,
'异常编号:'.$this ->getCode().PHP_EOL,
'异常行号:'.$this ->getLine().PHP_EOL,
'异常文件:'.$this ->getFile().PHP_EOL;
}
}
class MyException3 extends Exception {
public function show_exception_info(){
echo '异常信息:'.$this ->getMessage().PHP_EOL,
'异常编号:'.$this ->getCode().PHP_EOL,
'异常行号:'.$this ->getLine().PHP_EOL,
'异常文件:'.$this ->getFile().PHP_EOL;
}
}
try{
$a = 2;
switch( true ){
case $a > 3:
throw new MyException3( '变量大于3,超载!', 253 );
break;
case $a > 2:
throw new MyException2( '变量大于2,超载!', 252 );
break;
default:
throw new MyException1( '变量没有定义!', 250 );
break;
} }catch( MyException3 $e ){
// 处理异常
$e ->show_exception_info();
}catch( MyException2 $e ){
// 处理异常
$e ->show_exception_info();
}catch( MyException1 $e ){
// 处理异常
$e ->show_exception_info();
}finally{
echo '最终我还是执行了!';
}
虽然上面提到需要用catch捕获异常,但下面的就不用:
function show_exception_info( $e ){
echo '异常信息:'.$e ->getMessage().PHP_EOL,
'异常编号:'.$e ->getCode().PHP_EOL,
'异常行号:'.$e ->getLine().PHP_EOL,
'异常文件:'.$e ->getFile().PHP_EOL;
}
set_exception_handler( 'show_exception_info' );
throw new Exception( '异常信息传过去!', 22222 );
异常信息:异常信息传过去!
异常编号:22222
异常行号:9
异常文件:D:\workspace\project_shop\test.php
php异常处理面向对象和面向函数使用的更多相关文章
- 面向函数范式编程(Functional programming)
函数编程(简称FP)不只代指Haskell Scala等之类的语言,还表示一种编程思维,软件思考方式,也称面向函数编程. 编程的本质是组合,组合的本质是范畴Category,而范畴是函数的组合. 首先 ...
- 大话JS面向对象之扩展篇 面向对象与面向过程之间的博弈论(OO Vs 过程)------(一个简单的实例引发的沉思)
一,总体概要 1,笔者浅谈 我是从学习Java编程开始接触OOP(面向对象编程),刚开始使用Java编写程序的时候感觉很别扭(面向对象式编程因为引入了类.对象.实例等概念,非常贴合人类对于世间万物的认 ...
- JavaSE——面向对象与面向过程、类与对象、(属性、方法、构造器)等
一:面向对象与面向过程 二者都是一种思想,面向对象是相对于面向过程而言的. 面向过程: 1.面向过程思想强调的是过程(动作). 2.在面向过程的开发中,其实就是面向着具体的每一个步骤和过程,把每一个步 ...
- C#学习笔记——面向对象、面向组件以及类型基础
C#学习笔记——面向对象.面向组件以及类型基础 目录 一 面向对象与面向组件 二 基元类型与 new 操作 三 值类型与引用类型 四 类型转换 五 相等性与同一性 六 对象哈希码 一 面向对象与面向组 ...
- Java基础知识强化20:面向对象和面向过程的思想对比
面向对象与面向过程的区别 1. 与面向对象编程思想相比较的,往往是面向过程的编程思想,其实在我来理解,两者并不冲突,原因是面向对象的编程也必须使用面向过程的思维来实现具体的功能,所以我认为,两者的区 ...
- python的面向对象和面向过程
一.面向对象和面向过程的区别: a.面向过程: 1)根据业务逻辑从上到下写代码 2)开发思路是将数据和函数按照执行的逻辑顺序组织在一起 3)分开考虑数据与函数 定义性文字: 面向对象编程(Object ...
- 面向对象和面向过程,python中的类class,python中程序的入口——main方法,
1.程序入口,让main显现出来: print(__name__)#__name___是模块中的隐藏字段,当前模块运行的函数名 if __name__ == __main__ __main__() # ...
- PHP面向对象和面向过程
编程界不论是PHP.Python都有这么两种编程思想,oop面向对象.pop面向过程,这两种在功能上没有多大区别,但是在代码编写上却有很大区别.今天就记录一下面向对象和面向过程的优点.缺点.定义.实现 ...
- Day5-1 面向对象和面向过程
摘要: 类的定义 类的增删改查 对象的增删改查 对象的查找和绑定 面向对象和面向过程的区别: 1.面向过程就像是工厂的流水线,按部就班的有序的工作. 优点:把复杂的问题简单化 缺点:可扩展性差.一个步 ...
随机推荐
- DDD应对运营活动系统腐化实践
前言 任何人类的设计都会腐化,软件系统也不例外 腐化之谜 随着系统的规模增长和复杂度膨胀,系统会慢慢腐化. 于是改一个很简单的下单地址,就会牵动整个交易系统十几处的改动. 如何解决这种腐化之谜呢? 参 ...
- [转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)
两种情况(场景) 情况一 代码还只在本地,未push到运程仓库,想把代码还原到上一次commit的代码,此时操作为代码撤销 解决方案: 1 git reset [--hard|soft|mi ...
- 终于解决了python 3.x import cv2 “ImportError: DLL load failed: 找不到指定的模块” 及“pycharm关于cv2没有代码提示”的问题
终于解决了python 3.x import cv2 “ImportError: DLL load failed: 找不到指定的模块” 及“pycharm关于cv2没有代码提示”的问题 参考 :h ...
- jsoup获取文章内容
jsoup爬取文章内容 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Se ...
- [整理]Python程序员面试前需要看的博客(持续整理)
基本素养 如何聪明的提问 面试方法 从面试官角度来告诉大家,哪些人能面试成功 如何在面试中介绍自己的项目经验 计算机系统 [面试] 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清 ...
- 细聊Oracle通过ODBC数据源连接SQL Server数据库
类似文章搜索引擎上有很多,内容大致相同,今天所谓细聊是因为我在借鉴这些文章时候走了些弯路,所以写此文,为自己备忘,同时如果能为初涉此处知识点的小伙伴提供些帮助就更好了,文章结尾处的一些扩展有一定实战意 ...
- 【NANO】引脚说明
http://bbs.eeworld.com.cn/forum.php?mod=viewthread&tid=489650&page=1
- C-LODOP回调多个返回值On_Return_Remain
c-lodop默认一次只能回调一个值,回调后会销毁,如果想回调多个值,可加该语句:LODOP.On_Return_Remain=true;之前有博文:lodop和c-lodop通过打印状态和任务不在队 ...
- C#给图片加水印,可设置透明度
C#给图片加水印,可设置透明度,设置水印的位置可以看一下上一篇哈 /// <summary> /// Creating a Watermarked Photograph with GDI+ ...
- Python3 IO编程之StringIO和BytesIO
StringIO 很多时候,数据读写不一定是文件,也可以在内存中读写. 要把str写入StringIO,我们需要先创建一个StringIO,然后像文件一样写入即可 >>> from ...