php中的错误和异常
总结:
php错误不会抛出异常,因此不能被catch,但会根据配置写入日志文件或者输出到浏览器,所以可以通过日志文件查看错误
php异常都必须自己抛出,并通过catch捕捉。SQL语句执行的错误好像可以自动抛出。
在php中通常会在以下场景中使用异常:
对程序的悲观预测:如果认为自己的代码无法一一处理各种可预见的情况、不可预见的情况。程序的需要和对业务的关注: 如果对数据的一致性要求很高时,可以用try...catch把异常造成的逻辑中断破坏将到最小,并且经过补救处理后,不影响业务逻辑的完整性。语言级别的健壮性要求: 通过精确控制运行时的流程,在程序中断时,有预见的用try...catch缩小可能出错的范围,及时捕获异常并做出相应的补救。
PHP中什么是异常:
程序在运行中出现不符合预期的情况,允许发生(你也不想让他出现不正常的情况)但他是一种不正常的情况,按照我们的正常逻辑本不该出的错误,但仍然会出现的错误,属于逻辑和业务流程的错误,而不是编译或者语法上的错误。
在 PHP语言里,所有异常都必须自己抛出,而不像 JAVA 之类的语言会自动抛出异常,这也正是 PHP源代码里很少看到异常处理语句的原因之一。
PHP中什么是错误:
属于php脚本自身的问题,大部分情况是由错误的语法,服务器环境导致,使得编译器无法通过检查,甚至无法运行的情况。warning、notice都是错误,只是他们的级别不同而已,并且错误是不能被try-catch捕获的
PHP的错误报告有三种:
1.错误,语法解析错误,致命错误
2.警告
3.注意
错误 -> 致命错误,会终止已下程序的执行,语法错误的话,PHP压根就没执行
警告 -> 他不会终止运行,但会影响结果
注意 -> 不会终止执行,也不会影响结果
在PHP中错误,并不会以异常的形式抛出,所以不能被try-catch捕获,但是也有一些情况会当做异常和错误同时抛出(据说是,我没有找到合适的例子)。
也就是说,你想在数据库连接失败的时候自动捕获异常是行不通的,因为这就不是异常,是错误。(SQL语句的错误可以被抛出并被捕获)
把错误以异常的形式抛出(不能完全抛出)
php中的错误是不能以异常的像是捕获的,但是我们需要让他们抛出,已达到扩展 try-catch的影响范围。
set_error_handler() 方法,他是捕获错误的,所以我们就可以借助他来吧错误捕获,然后再以异常的形式抛出。
这样做是有缺点的,会受到set_error_handler()函数捕获级别的限制。他能够捕获一部分错误,不能捕获系统级E_ERROR、E_PARSE等错误。
所以,在php中最好不要简单的在可能出错的地方直接抛出异常,在一些框架中,重写了上述的方法,异常和错误可以正常抛出
1 <?php
2 set_error_handler('error');
3 function error($type, $message, $file, $line)
4 {
5 throw new \Exception($message . '错误当做异常');
6 }
7
8 $num = 0;
9 try {
10 echo 1/$num;
11
12 } catch (Exception $e){
13 echo $e->getMessage();
14 }
15 ?>
php中的错误和异常的更多相关文章
- Erlang中一些错误或者异常的标识
erlang中错误大体分为四种: 1. 编译错误 2. 逻辑错误 3. 运行时错误 4. 用户代码生成的错误 编译错误,主要是编译器检测出的代码语法错误 逻辑错误,是指程序没有完成预 ...
- 关于Python中的错误与异常,你是否了解的够仔细?
每次版本结束都描述这着同样的错误,相似的问题,但始终没见解决.所以今天,我就来总结下Python的错误与异常! 异常与错误 错误 语法错误 可以通过IDE或者解释器给出提示的错误 opentxt('a ...
- Python中的错误和异常
前言 错误是程序中的问题,由于这些问题而导致程序停止执行.另一方面,当某些内部事件发生时,会引发异常,从而改变程序的正常流程. python中会发生两种类型的错误. 语法错误 逻辑错误(异常) 语法错 ...
- php错误及异常捕捉
原文:php错误及异常捕捉 在实际开发中,错误及异常捕捉仅仅靠try{}catch()是远远不够的. 所以引用以下几中函数. a) set_error_handler 一般用于捕捉 E_NOTI ...
- [Go] 如何正确地 抛出 错误 和 异常(error/panic/recover)?
序言 错误 和 异常 是两个不同的概念,非常容易混淆.很多程序员习惯将一切非正常情况都看做错误,而不区分错误和异常,即使程序中可能有异常抛出,也将异常及时捕获并转换成错误.从表面上看,一切皆错误的思路 ...
- php 中的错误处理机制
php 里有一套错误处理机制,可以使用 set_error_handler 接管 php 错误处理,也可以使用 trigger_error 函数主动抛出一个错误. set_error_handler( ...
- Python3基础(九) 错误和异常
本文主要介绍Python中的错误和异常,涉及到简单的异常处理.抛出异常以及清理动作.至于自定义异常类,将在介绍类与继承的时候讲到. 一.定义 常见的两种错误:语法错误 和 异常. 1.语法错误(Syn ...
- 错误注入 异常行为 环境变量或代码动态激活来触发这些异常行为 模拟错误 容错性 正确性 稳定性 宏 本质 macro
小结: 1. 微服务中某个服务出现随机延迟.某个服务不可用. 存储系统磁盘 IO 延迟增加.IO 吞吐量过低.落盘时间长. 调度系统中出现热点,某个调度指令失败. 充值系统中模拟第三方重复请求充值成功 ...
- Java错误和异常解析
Java错误和异常解析 错误和异常 在Java中, 根据错误性质将运行错误分为两类: 错误和异常. 在Java程序的执行过程中, 如果出现了异常事件, 就会生成一个异常对象. 生成的异常对象将传递Ja ...
随机推荐
- VMware同时使用三种网络模式的虚拟机,测试连通性
参考资料: 虚拟机中桥接不自动分配IP与设置静态IP问题: https://blog.csdn.net/u013187057/article/details/80579211 腾讯课堂: https: ...
- SCCM2012 R2实战系列之十二:解决OSD分发时间过长的问题
对于SCCM 2012 R2的初学者来说,能够成功分发操作系统可能已经是非常兴奋了.但在企业中会遇到客户提出的各种各样苛刻的需求.所以在平时实验过程中多站点客户的角度想问题,尽可能的贴近企业实际生产环 ...
- Google App Engine10年,支持更多你喜欢的编程语言
2008年4月7日google推出Google App Engine(GAE),时间过得真快,10年过去了,2010年3月google退出中国,一转眼也过去7年了.早在2009年的时候GAE就在中国内 ...
- spring 中几种注解的说明
1.@controller 控制器(注入服务) 2.@service 服务(注入dao) 3.@repository dao(实现dao访问) 4.@component (把普通pojo实例化到spr ...
- Servlet --简单用户留言系统
1.创建用户表和留言表 2.编写数据库连接工具类 public class SqlserverDBConn { private Statement stmt; private Connection c ...
- 在线安装CM集群
https://www.cloudera.com/documentation/manager/5-0-x/Cloudera-Manager-Installation-Guide/cm5ig_insta ...
- Java - 18 Java Scanner 类
java.util.Scanner是Java5的新特征,我们可以通过 Scanner 类来获取用户的输入. 下面是创建 Scanner 对象的基本语法: Scanner s = new Scanner ...
- redis如何随系统启动
Redis可以通过命令redis-server启动,但这种启动方式适用于开发环境,对于生产环境来说,配置好redis的配置文件,并使redis随linux启动则更加方便些,下面则记录下redis如何随 ...
- 转载:centos安装redis
转载自:https://www.cnblogs.com/renzhicai/p/7773080.html CentOS下Redis的安装 [TOC] 前言 安装Redis需要知道自己需要哪个版本,有针 ...
- QSetting 说明和简单使用
今天看到服务端代码有一个QSetting.一开始以为是STL模板中的Set(弄到QT中改了个名字而已).仔细一看吓一跳,不是STL模板.是qt特有的一个类. 用来保存或读取一些配置信息用的.看了后,感 ...