PHP异常与错误处理机制

先区别一下php中错误 与 异常的概念吧

PHP错误:是属于php程序自身的问题,一般是由非法的语法,环境问题导致的,使得编译器无法通过检查,甚至无法运行的情况。平时遇到的warming、notice都是错误,只是级别不同而已。

PHP异常:一般是业务逻辑上出现的不合预期、与正常流程不同的状况,不是语法错误。

PHP异常处理机制借鉴了java  c++等,但是PHP的异常处理机制是不健全的。异常处理机制目的是将 程序正常执行的代码  与 出现异常如何处理的代码分离。

PHP是无法自动捕获异常的(绝大多数),只有主动抛出异常并捕捉。也就是说,对于异常,是可预见的。

以除数为0为例,看看PHP是如何处理的

<?php 
$a = 0;
try {echo 4/$a;
}
catch (Exception $e){echo $e->getMessage();
}
//报错,PHP是无法自动捕获异常的,必须手动抛出
?>

  下面手动抛出

<?php 
$a = 0;
try {if($a == 0){throw new Exception('除数不能为0', 1);}echo 4/$a;//不会执行
}
catch (Exception $e){echo $e->getMessage();
}
?>

  可以看到,catch捕获到了异常。

PHP中对于异常的机制使用,一般用于业务逻辑判断上面,当业务逻辑不正常时,进行特殊处理。

下面看一下PHP错误处理机制。PHP提供了set_error_handler()函数进行错误处理。当错误发生时,set_error_handler会统一处理错误。

如下所示

<?php 
$a = 0;
function handle($errno,$errstr,$errfile,$errline){echo $errfile;
}
set_error_handler('handle');echo 4/$a;
echo PHP_EOL;
echo 'hehe';
?>

  上面的

echo 4/$a;发生了错误,此时进入了错误处理函数handle中,进行错误处理,一般我们在handle中加入die,终止执行。

转载于:https://www.cnblogs.com/taijun/p/4234603.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 计算小于某个数_python 列表寻找满足某个条件的开始索引和结束索引、区间范围...

在使用python列表的时候&#xff0c;我们经常需要找到满足某个条件的数的开始索引和结束索引&#xff0c;即满足某个条件的数的区间范围&#xff0c;本文以寻找绝对值大于等于0且小于等于3的数值区间为例&#xff0c;代码如下所示&#xff1a;这是我在做项目写python代码的时候…

vue项目发布时去除console语句

在vue.config.js中添加下面的代码即可 // vue-cli version > 3 modeule.exports {configureWebpack: config > {if (process.env.NODE_ENV "production") {config.optimization.minimizer[0].options.terserOptions.compress.drop_console true;}}, }

Robotium编写测试用例如何模拟Junit4的BeforeClass和AfterClass方法1 - 条件判断法

Robotium的测试类ActivityInstrumentationTestCase2是继承于Junit3的TestCase类&#xff0c;所以并没有提供Junit4的特性.如网上总结说的 不能通过annotate的方式来识别子类的新特征&#xff0c;如不能实现beforeclass&#xff0c;afterclass等特征。只能通过写setup和teardown…

DateTimeFormatInfo 类

From: http://127.0.0.1:47873/help/0-3684/ms.help?methodpage&idT%3ASYSTEM.GLOBALIZATION.DATETIMEFORMATINFO&productVS&productVersion100&topicVersion100&localeZH-CN&topicLocaleZH-CN 定义如何根据区域性设置 DateTime 值的格式并显示这些值…

cisco PIX防火墙的配置及注解完全手册

cisco PIX防火墙的配置及注解完全手册 PIX Version 6.3(1)interface ethernet0 auto 设定端口0 速率为自动interface ethernet1 100full 设定端口1 速率为100兆全双工interface ethernet2 auto 设定端口2 速率为自动nameif ethernet0 outside security0 设 定端口0 名称为 out…

保姆级!!前端必会Taro入门级教学!!

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣获取前端知识 本文将介绍 Taro 是如何从一个为了解决小程序开发问题的框架演变成一个多端统一开发框架的。 使用 React 语法来写小程序 谈一谈小程序开发 微信小程序为我们的业务提供了一种新的展现形态&…

js获取用户当前所在城市(ip)

被安利到一个是搜狐家查询ip地址的接口&#xff1a; http://pv.sohu.com/cityjson?ieutf-8 直接打开效果如下&#xff1a; 依照惯例&#xff0c;例子用法给大家放上来&#xff1a; <script src"http://pv.sohu.com/cityjson?ieutf-8"></script> <…

关于c++跟java区别的几个总结

之前c&#xff0c;最近java有点混乱&#xff0c;总结一下&#xff1a; 1.在写java程序的时候会发现&#xff0c;假如你自己写了一个类class A{。。。}&#xff0c;这个时候你要实例化&#xff0c;必须new一个&#xff1b;但是在c里面就不用&#xff0c;c中你可以直接声明A a; 为…

命令行编译c#源程序

开发环境&#xff1a;WinXP VS2010(C#) using System;public class Test {public static int Main(string[] args){string str DateTime.Now.ToString("HH:mm:ss"); // 时分秒(各占两位)Console.WriteLine("当前时间&#xff1a;{0}", str);return 0;} …

来自山西机器人乐队_格力:中国第一支工业机器人乐队重磅亮相

原标题&#xff1a;格力&#xff1a;中国第一支工业机器人乐队重磅亮相一直以来&#xff0c;格力的董明珠可谓是媒体的关注焦点&#xff0c;前有董小姐与雷军的10亿赌约&#xff0c;后有格力进军手机行业&#xff0c;现在格力更是涉足汽车以及芯片行业&#xff0c;而格力的智能…

Samba将Linux集成到Windows网络

&#xff08;一&#xff09;Samba是一个与Windows操作系统兼容的文件与打印共享服务器,通过在Linux服务器上配置Samba,可以使Linux系统集成到Windows网络中。在网络中,用户可以使用多种方法实现数据共享,例如常见的Web服务、FTP服务。使用这两种网络服务的好处是&#xff1a;它…

Vue、Element-ui项目中如何使用Iconfont(阿里图标库)

我们使用element-ui、vue开发网站的时候&#xff0c;往往图标是起着很重要的作用。 1.傻瓜式引用&#xff1a;由于这种方法及其简单 省去了很多繁琐的步骤&#xff0c; a.引入项目生成的&#xff0c;图标地址。 b.使用 推荐使用这种&#xff0c;详情请看文档&#xff01;&…

Unity与Android交互

转载自 http://www.narkii.com/club/thread-320335-1.html 这段时间在研究嵌入sdk&#xff0c;途中遇到不少问题和坑&#xff0c;在这就不一一说了。嵌入sdk是比较常见的吧&#xff0c;如接入广告啊&#xff0c; 新浪的分享...... 这些都需要接入sdk的。&#xff08;这些我在这…

自定义overflow:auto的滚动条样式

自定义overflow:auto的滚动条样式

angular路由传递参数_Angular路由——在路由时候传递数据

有3种方式1、在查询参数中传递数据2、在路由路径中传递数据定义路由路径时就要指定参数名字&#xff0c;在实际路径中携带参数。3、在路由配置中传递数据一、在查询参数中传递数据第一步&#xff1a;修改模版中商品详情链接&#xff0c;带一个指令queryParams商品详情效果&…

python自动登录百度空间

参考: http://blog.163.com/sunzs20113126/blog/static/3706880920120105131652/ 开发环境&#xff1a;Fedora12 Python2.6.2 #!/usr/bin/python # coding: GBKimport urllib,urllib2,httplib,cookielibdef auto_login_hi(url,name,pwd):url_hi"http://passport.baidu.c…

SQL WITH NOCHECK 和 CLUSTERED | NONCLUSTERED

ALTER TABLE [dbo].[atr_cont_b] WITH NOCHECK ADD CONSTRAINT [PK_atr_cont_b] PRIMARY KEY CLUSTERED ( [id_cont_b] ) ON [PRIMARY] GO WITH NOCHECK: 指定表中的数据是否用新添加的或重新启用的 FOREIGN KEY 或 CHECK 约束进行验证。如果没有指定&#xff0c;对于新约…

PHP 文件上传全攻略

PHP文件上传功能一般都是大家使用事先封装好的函数&#xff0c;要用的时候直接使用已封装的函数就完了&#xff0c;但有时候不能使用封装函数&#xff0c;还真不大能记住PHP的上传相关的东西&#xff0c;在此做个总结&#xff0c;以备后用。1.表单部分 允许用户上传文件&#x…