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.面向过程就像是工厂的流水线,按部就班的有序的工作. 优点:把复杂的问题简单化 缺点:可扩展性差.一个步 ...
随机推荐
- 【微信小程序】scroll-view 的上拉加载和下拉刷新
1.在微信小程序中,想到 下拉刷新 和 上拉加载,如果是整个页面都拖动的话,可以在页面配置中,配置 enablePullDownRefresh 和 onReachBottomDistance 然后在 ...
- Java实现视频网站的视频上传、视频转码、及视频播放功能(ffmpeg)
视频网站中提供的在线视频播放功能,播放的都是FLV格式的文件,它是Flash动画文件,可通过Flash制作的播放器来播放该文件.项目中用制作的player.swf播放器. 多媒体视频处理工具FFmpe ...
- cv2.imread()
cv2.imread() 使用opencv和caffe的伙伴们,可能会有一个疑问,那就是对于同时读取图片的cv2.imread()和caffe.io.loadimage两个函数,有什么差别? 1.cv ...
- springboot配置Filter的两种方法
一.使用注解1. 假设Filter类的路径为com.sanro.filter @Slf4j @WebFilter(filterName = "authFilter", urlPat ...
- PostgreSQL 数据库备份与恢复 pd_dump pg_restore
备份 PG 数据库生成的文件可以有两种,一种是 SQL 文件,一种是二进制文件,二进制文件只能使用 pg_restore 进行恢复. PostgreSQL 数据库操作简要说明 PostgreSQL数据 ...
- centos和windows添加路由命令记录
# 默认路由做香港出口route add default gw 192.168.10.33route add default gw 192.168.10.1 # 删除默认路由# route del d ...
- C++11 学习笔记 std::function和bind绑定器
C++11 学习笔记 std::function和bind绑定器 一.std::function C++中的可调用对象虽然具有比较统一操作形式(除了类成员指针之外,都是后面加括号进行调用),但定义方法 ...
- 零基础学Python-第一章 :Python介绍和安装-02.Python的发展历史与版本
pthhon3.0对开发者带来了麻烦,因为2.0个3.0的程序并不是兼容的. 目前python3.0已经变成了真正的主力 官方版本和发行版 发行版会把常用的科学计算的包也给继承进来.这样就不用考虑包和 ...
- 【438】Python 处理文件
1. 读取文件,计算 tweets 数目 python中readline判断文件读取结束的方法 line == '' python:如何检查一行是否为空行 line == '\n' or line = ...
- expect 实现自动交互脚本
1. 说明 在编写脚本时,可能会遇到需要在另一台主机上执行一个命令,或者在本机拷贝另一台主机内的一个文件.如果两台主机之间没有做互信,就会牵扯到用户输入密码的交互过程,这对编写自动脚本来说, 就行不通 ...