PHP错误级别Parseerror>FatalError>Waning>Notice>DeprecatedDeprecated最低级别的错误(不推荐,不推荐)在使用一些过期的函数时会出现,程序会继续执行Notice通知级别的错误使用没有引号时会出现一些未定义的变量、常量或数组键,程序会继续执行Waning警告级别的错误。程序有问题,需要修改代码!!!程序继续执行FatalError错误级别的错误程序直接报错,需要修改代码!!!要中断程序的执行,可以使用register_shutdown_function()函数在程序终止前触发函数Parseerror。Syntaxparsingerror语法检查阶段报错,需要修改代码!!!中断程序的执行,除了修改ini文件,将错误信息写入日志外,无能为力E_USER_relatederrorUser-definederror,用户手动抛出错误,执行自定义错误处理PHP错误相关函数ini_set('显示错误',0);//关闭错误输出(开发环境开启,生产环境关闭)error_reporting(E_ALL&~E_NOTICE);//设置错误报告级别ini_set('error_reporting',0);//设置报错级别PHP错误配置除了在脚本中设置外,还可以在php.ini配置文件中配置error_reporting=E_ALL&~E_NOTICE;//设置报错级别display_errors=1;//打开开发环境,关闭生产环境PHP异常PHP异常是后面添加的特性,不同于JAVA/C#异常,PHP异常需要手动抛出thrownewException,而不是系统自动抛出PHP的区别错误和异常,它们是两个不同的概念,但是它们有一些共同点:如果异常没有被Capture处理,程序就会终止并报告一个FatalError错误。看到这里大家会想异常是不是一种错误。这是一种错觉,但可以这样理解。但是,捕获到异常后程序还可以继续执行,真正的FatalError发生后程序必须终止。可以使用try{}catch(){}捕获异常,catch之后可以继续执行后续代码;而错误不能使用try如果{}catch(){}抛出异常,则必须捕获,否则程序将终止执行。PHP异常和错误抛出异常抛出:thrownewException('SomeErrorMessage');错误抛出:trigger_error()trigger_error()触发的错误不会被try-catch异常捕获语句捕获PHP错误处理set_error_handler()只能处理三个级别的错误:Deprecated、Notice和Waning,处理后,错误发生后脚本会继续执行该行register_shutdown_function()这个方法是脚本结束前的最后一个回调函数,所以不管是die()/error(exception)/还是脚本正常结束都会调用PHP异常处理set_exception_handler()设置默认的异常处理器,如果有try/catch捕获,则不执行该函数,否则执行,如果执行,则脚本不会继续执行下一行发生异常的代码,程序将立即终止,但需要以数组的形式传递。数组的第一个值为“类名”,第二个参数为“方法名”,如下代码所示:Exception:",$exception->getMessage();}}set_exception_handler(array('App','myException'));thrownewException('UncaughtExceptionoccurred');?>PHP异常分类由于用户行为引起的Exceptions1.验证器未通过2.无查询结果3.需要返回具体信息给用户4.不需要记录日志5.可以作为例外也可以不作为例外,看需要和个人情况。由于服务器自身导致的Exception1.代码错误2.调用第三方接口错误3.不需要向用户返回具体信息4.需要记录日志程序中自动抛出PHP异常自PHP异常是以后版本的新特性,设计起来JAVA/C#异常是不同的。JAVA的异常大部分是系统自动抛出的,而PHP的异常不是系统自动抛出的,需要手动抛出,这就把PHP异常在程序中的作用降低了一半(异常是意想不到的东西,我们没有expect.如果是手动抛出,证明是提前预料到的,异常的意思会改变。)在PHP中,异常是手动抛出的,而errors是系统自动抛出的(也可以beManuallythrowing)我们需要让系统自动抛出异常(比如JAVA)就必须依赖error(这三个错误是Deprecated,Notice,Waning,其他的error是不行的,因为它们会终止程序)getMessage()。'
';}echo"end";?>执行结果:除以zeroendPHP7异常处理大改一段TP5源码导致PHP7异常变化很明显set_exception_handler()函数只能捕获Exception类或者派生类的对象,为什么呢你需要捕捉到的物体来做出判断吗?结果导致PHP7发生变化。请看下面的分析。我已经说过需要手动抛出异常。时间上,上面说的方法是将Deprecated、Notice、Waning这三种错误封装成系统自动抛出的异常,但是Fatal错误还是不能封装成系统自动抛出的异常,因为fatalerrors(FatelError)仍然无法捕获在PHP7之前,Deprecated、Notice、Waning等错误可以捕获(使用set_error_handler()函数),而FatelError则无法捕获。PHP7之后,出现了异常和错误的通用接口Throwable。lError,而前面三类错误不变)也可以像Exception一样被捕获(2种捕获方式:1、try/catch2、set_exception_handler())示例代码try{go();//函数为undefined}catch(Exception$e){//捕获异常}catch(Error$er){//捕获错误}
