PHP错误处理有两种:标准的错误处理和异常(OOP语法新出现的错误处理机制)

标准错误是由:错误等级,错误信息,错误发生文件,与错误发生行号组成。php提供了多种错误等级,用来描述错误的重要程度。

标准错误两种触发形式:
php自动触发: php检测到存在一个错误,则会将错误触发
用户脚本触发:
利用内置函数trigger_error('错误消息','错误级别');
错误级别只能使用常量来表示:默认是notice级别:E_USER_NOTICE
警告:E_USER_WARNING,致命错误:E_USER_ERROR

处理:错误报告

将错误消息直接输出到标准输出(标准错误)
这个功能是可以通过php的配置进行控制

error_reporting 控制的是哪种级别的错误应该被报告
display_errors  是否开启页面错误功能(开启则在页面输出,不开启则不输出)
以上两个配置都支持在用户脚本修改:通过ini_set('配置项的名',值)

显示所有错误:E_ALL|E_STRICT ,其他:E_NOTICE,E_WARING,E_ERROR
常用的在开发时,开启全部: ini_set('display_errors',E_ALL|E_STRICT);
在生产时,关闭所有:ini_set('display_errors',0)

错误日志
一旦发生错误,将信息记录到日志文件内
是否开启错误日志: ini_set('log_errors',1);
错误日志的位置: ini_set('error_log',d:/error.log);
注意:错误日志和错误报告是可以同时存在的。

自定义错误处理器:
用户自定义一个函数,一旦错误发生,执行用户的函数来处理函数,用户自定义的函数,称为错误处理器
设置一个用户定义的错误处理函数:set_error_handler("用户自定义函数")

关于error级别的处理,致命错误是不能被处理的(不能从错误中恢复)
如果自定义了用户的错误处理器,E_USER_ERROR是可以被恢复的

一旦定义用户错误处理器,系统的错误处理方式是否还会执行?
不会,如果这个用户的自定义处理器返回false,则表示用户处理完毕,交由系统的继续处理
在项目中通常通常分为开发模式和生产模式:

开发模式,显示所有的错误报告:
ini_set('error_reporting',E_ALL|E_STRICT);
ini_set('display_errors',1);
ini_set('log_errors',0);
生产模式,屏蔽所有的错误报告,但是记录错误日志
ini_set('display_errors',0);
ini_set('error_log','d:/error.log');
ini_set('log_errors',1);

错误处理之异常

异常是一种php对oop语法,提供的典型的错误的处理方法,在oop语法中,大家可以在发生问题,通过异常的方式,进行管理,异常也是一个错误,只不过是将错误信息放置在一个对象中,异常有个前提,保证语法是正确的
异常的处理由发生和处理组成:
所谓发生:指的的是抛出一个异常,利用throw 完成
所谓处理:一旦异常出现,如何得到并处理这个异常,由两个阶段组成,监听(try)和捕获(catch)

自定义异常处理器:(异常处理器就是一个对象)

如果说一个异常被抛出了,但是没有被捕获,就会触及一个E_ERROR级错误,可以利用异常的自定义处理器完成对未捕获异常的处理

创建自定义的错误处理类

1,Myception类继承了Exception类的属性和方法,是原异常类的扩展

2,创建errorMessage 方法,如果email不合法,则该方法返回错误

3,执行try代码块,由于email不合法,抛出异常

4,catch 代码块捕获异常,并显示错误消息

set_exception_handler()     设置一个用户定义的异常处理函数

通俗的讲:就是当你的程序需要抛出一个异常的时候调用哪个自定义的函数,就这么简单

php错误处理和异常处理的更多相关文章

  1. [python]错误检测及异常处理try-except

    1. 简介 要给代码添加错误检测及异常处理,只需要将其封装在try-except中. try:通常的代码 except:处理错误和异常的代码 2. 示例 import os try: path = ' ...

  2. PHP中的错误处理、异常处理机制详解

    在编写PHP程序时,错误处理是一个重要的部分.如果程序中缺少错误检测代码,那么看上去很不专业,也为安全风险敞开了大门 例: <?php $a = fopen('test.txt','r'); / ...

  3. PHP基础之 错误处理 及 异常处理

    错误处理: 1.使用die()方法,结束语句的执行,并输出错误消息 2.自定义错误和错误触发器 自定义错误处理函数(系统有默认的错误处理函数,自定义的错误处理会覆盖默认的处理函数) ========= ...

  4. PHP中的错误处理和异常处理

    错误处理:    1.语法错误    2.运行时的错误    3.逻辑错误 错误报告:        错误E_ERROR        警告E_WARNING        注意E_NOTICE 开发 ...

  5. PHP错误处理及异常处理笔记

    给新人总结一下PHP的错误处理. PHP提供了错误处理和日志记录的功能. 这些函数允许你定义自己的错误处理规则,以及修改错误记录的方式. 这样,你就可以根据自己的需要,来更改和加强错误输出信息以满足实 ...

  6. java程序错误类型及异常处理

    一.程序的错误类型 在程序设计中,无论规模是大是小,错误总是难免的.程序的设计很少有能够一次完成,没有错误的(不是指HelloWorld这样的程序,而是要实现一定的功能,具备一定实用价值的程序),在编 ...

  7. python的错误类型和异常处理

    # isinstance() # 判断实例a是否属于类b # issubclass() # 判断类a是否为类b的派生类 # 异常处理 try: pass #Exception是错误类型,能catch到 ...

  8. 一,php的错误处理和异常处理

    php程序中如果语法或逻辑错误,会引起php默认错误处理机制,不会引起异常处理机制,只有在程序中throw抛出异常后,如果没有catch捕捉异常,默认调用php默认异常处理. php有默认错误机制和默 ...

  9. 小议C#错误调试和异常处理

    在程序设计中不可避免地会出现各种各样的错误,在编写代码时须要尽量避免. 在处理错误时,首先应该分析错 误的类型,找出出错的原因才干解决错误. 错误的分类 watermark/2/text/aHR0cD ...

随机推荐

  1. Android用户界面UI组件--AdapterView及其子类(四) GridView

    GridView常用的XML属性: android:columnWidth  设置列的宽度. android:horizontalSpacing  两列之间的间距.  android:numColum ...

  2. MySQL源码 优化器

    完成了sql的解析过程后,开始进入优化器: 调用的流程分为:     mysql_select:           JOIN::prepare:           JOIN::optimize: ...

  3. BZOJ2293: 【POJ Challenge】吉他英雄

    2293: [POJ Challenge]吉他英雄 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 80  Solved: 59[Submit][Stat ...

  4. 通过新的 Azure 媒体服务资源管理器工具管理媒体工作流

    Xavier Pouyat    Azure 媒体服务高级项目经理 几个月前,一家广播公司找到了我,希望我向他们提供一种图形界面工具,好让他们使用 Azure媒体服务来上传.管理资产并对资产进行编 ...

  5. 【Android 复习】:从Activity中返回数据

    在实际的应用中,我们不仅仅要向Activity传递数据,而且要从Activity中返回数据,虽然返回数据和传递类似,也可以采用上一讲中的四种方式来传递数据,但是一般建议采用Intent对象的方式的来返 ...

  6. [转]NHibernate之旅(7):初探NHibernate中的并发控制

    本节内容 什么是并发控制? 悲观并发控制(Pessimistic Concurrency) 乐观并发控制(Optimistic Concurrency) NHibernate支持乐观并发控制 实例分析 ...

  7. EF多表查询方式

    5, 连接 可以的连接有Join 和 GroupJoin 方法.GroupJoin组联接等效于左外部联接,它返回第一个(左侧)数据源的每个元素(即使其他数据源中没有关联元素). using (var ...

  8. Android核心基础(手机卫士的一个知识点总结)

    注意:有些功能是需要权限的,在这里并没有写出来,在程序运行中,根据程序报的错误,添加相应的权限即可,里面的具体里面可能有一些小细节,没有明确的写出来,具体的需要在程序中自己调试,解决. 这个总结涵盖了 ...

  9. ReadingNotes@02-12-2013

    ReadingNotes@02-12-2013 */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Cons ...

  10. 用C++的类做三种优先队列的实现

    学过数据结构的都知道优先队列这种东西,普通的队列是依据入队顺序,先入队的先出队,而优先队列则是依照键值,键值越大(或越小),就越先出队. 所以,优先队列基本支持push,pop,empty,size, ...