parse error_parse error什么意思居然可以这样

Mark wiens

发布时间:2024-04-28

请一定要注意,没有特殊说明:本例 PHP Version \x26lt; 7  说起PHP异常处理,大家首先会想到try

parse error_parse error什么意思居然可以这样

 

请一定要注意,没有特殊说明:本例 PHP Version < 7  说起PHP异常处理,大家首先会想到try-catch,那好,我们先看一段程序吧:有一个test.php文件,有一段简单的PHP程序,内容如下,然后命令行执行:php test.php

getMessage();

    }我的问题是:这段程序能正确的捕捉到除0的错误信息吗?  如果你回答能,那你就把这篇文章看完吧!应该能学点东西本文章分5个部分介绍我的异常处理的理解:一、异常与错误的概述二、ERROR的级别三、PHP异常处理中的黑科技

四、巧妙的捕获错误和异常五、自定义异常处理和异常嵌套六、PHP7中的异常处理一、异常与错误的概述  PHP中什么是异常:  程序在运行中出现不符合预期的情况,允许发生(你也不想让他出现不正常的情况)但他是一种不正常的情况,按照我们的正常逻辑本不该出的错误,但仍然会出现的错误,属于逻辑和业务流程的错误,而不是编译或者语法上的错误。

  PHP中什么是错误:  属于php脚本自身的问题,大部分情况是由错误的语法,服务器环境导致,使得编译器无法通过检查,甚至无法运行的情况warning、notice都是错误,只是他们的级别不同而已,并且错误是不能被try-catch捕获的。

  上面的说法是有前提条件的:  在PHP中,因为在其他语言中就不能这样下结论了,也就是说异常和错误的说法在不同的语言有不同的说法在PHP中任何自身的错误或者是非正常的代码都会当做错误对待,并不会以异常的形式抛出,但是也有一些情况会当做异常和错误同时抛出(据说是,我没有找到合适的例子)。

也就是说,你想在数据库连接失败的时候自动捕获异常是行不通的,因为这就不是异常,是错误但是在java中就不一样了,他会把很多和预期不一致的行为当做异常来进行捕获  PHP异常处理很鸡肋?  在上面的分析中我们可以看出,PHP并不能主动的抛出异常,但是你可以手动抛出异常,这就很无语了,如果你知道哪里会出问题,你添加if else解决不就行了吗,为啥还要手动抛出异常,既然能手动抛出就证明这个不是异常,而是意料之中。

以我的理解,这就是PHP异常处理鸡肋的地方(不一定对啊)所以PHP的异常机制不是那么的完美,但是使用过框架的同学都知道有这个情况:你在框架中直接写开头那段php“自动”捕获异常的代码是可以的,这是为什么?看过源码的同学都知道框架中都会涉及三个函数:register_shutdown_function,set_error_handler,set_exception_handler后面我会重点讲解着三个黑科技,通过这几个函数我们可以实现PHP假自动捕获异常和错误。

二、ERROR的级别  只有熟悉错误级别才能对错误捕捉有更好的认识下面我再总结性的给出这几类错误级别:Fatal Error:致命错误(脚本终止运行) E_ERROR         // 致命的运行错误,错误无法恢复,暂停执行脚本。

 E_CORE_ERROR    // PHP启动时初始化过程中的致命错误 E_COMPILE_ERROR // 编译时致命性错,就像由Zend脚本引擎生成了一个E_ERRORE_USER_ERROR    // 自定义错误消息。

像用PHP函数trigger_error(错误类型设置为:E_USER_ERROR) Parse Error:编译时解析错误,语法错误(脚本终止运行)E_PARSE  //编译时的语法解析错误 Warning Error:警告错误(仅给出提示信息,脚本不终止运行)

E_WARNING         // 运行时警告 (非致命错误)E_CORE_WARNING    // PHP初始化启动过程中发生的警告 (非致命错误) E_COMPILE_WARNING // 编译警告。

E_USER_WARNING    // 用户产生的警告信息Notice Error:通知错误(仅给出通知信息,脚本不终止运行)E_NOTICE      // 运行时通知表示脚本遇到可能会表现为错误的情况.。

E_USER_NOTICE // 用户产生的通知信息由此可知有5类是产生ERROR级别的错误,这种错误直接导致PHP程序退出可以定义成:ERROR = E_ERROR | E_CORE_ERROR |  E_COMPILE_ERROR | E_USER_ERROR | E_PARSE。

三、PHP异常处理中的黑科技  前面提到框架中是可以捕获所有的错误和异常的,之所以能实现应该是使用了黑科技,哈哈!其实也不是什么黑科技,主要是三个重要的函数:  1:set_error_handler()

  看到这个名字估计就知道什么意思了,这个函数用于捕获错误,设置一个用户自定义的错误处理函数

免责声明:本站所有信息均搜集自互联网,并不代表本站观点,本站不对其真实合法性负责。如有信息侵犯了您的权益,请告知,本站将立刻处理。联系QQ:1640731186