PHP错误与异常的处理

  

PHP错误与异常的处理,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

错误与异常

错误,可以理解<强>程序本身的错误强,例如语法错误。而异常则更偏向于<强>程序运行不符合预期强或者<强>不符合正常流程强;对于PHP语言而言,处理错误和处理异常使用的机制完全不同,因此很容易让人产生困惑。

例如,我们希望通过捕获异常来处理除数为0的情况,但是在捕获到异常之前,PHP就触发了错误。

 try  {
  ,,,a 美元;=,5,/,0;
  },catch  (Exception  $ e), {
  ,,,$ e→getMessage ();
  ,,,a 美元;=,1;,,//,通过异常来处理,a 美元;为,0,的情况,但是实际上,捕获不到该异常
  }
  
  echo 美元;
  警告://,PHP , Division  by  0 

也就是说,PHP将除数为0的情况当成了错误而触发,而不会自动抛出异常,因此没法捕获。类似的,在很多情况下,PHP都没办法自动抛出异常。只能通过,<代码>如果其他-> 扔,方法来并手动抛出异常。

上述情况的发生,主要还是因为异常机制是PHP向面向对象演进后得到的产物。而在此之前PHP的报错主要还是通过错误机制,因此,在很多情况下,PHP的错误要比异常更有价值。不过PHP7开始统一这两者,使错误也可以像异常那样抛出(这部分内容将放在异常部分讲解)。

错误级别

PHP中的错误可理解为,<强>使脚本不运行不正常的情况强,根据错误级别从高到低可划分为五类

<李>

解析错误或语法错误——语法解析错,误触发该错误后,脚本<强>完全无法运行;

<李>

致命错误——致命错,误触发该错误后,<强>后面的脚本无法继续执行;

<李>

警告错误——出现比较不恰当的地方,脚本可<强>继续执行,

<李>

通知错误,出现不恰当的地方,但是程度比警告错误低,脚本可<强>继续执行,

<李>

弃用错误——不推荐这么使用,未来可能会废弃,脚本可<强>继续执行,

默认情况下,PHP触发错误,并显示错误的级别及对应的提示。

解析错误示例——语句结尾不写分号

 echo “abc"//,PHP  Parse 错误:,,syntax 错误,,unexpected 最终获得of 文件,,expecting  & # 39; & # 39;,趁机& # 39;;

致命错误示例——使用不存在的函数

 echo “之前\ n";
  foo ();
  echo “after",,//,本行无法继续执行//之前//,PHP  Fatal 错误:,,Uncaught 错误:,Call 用undefined  function  foo () 

警告错误示例——引入不存在的文件

 a 美元;=,“foo";
  包括(& # 39;写到# 39;);
  echo 一个美元,//,程序继续执行
  警告://,PHP ,包括(写到):,failed 用open 流:,No  such  file 或是directory …//,foo 

通知错误示例——输出不存在的变量

 echo  $ foo;
  echo  12345;
  注意://,PHP , Undefined 变量:foo//,12345 

弃用错误示例——在一些字符串函数中传入数字而非字符串

大小写敏感(& # 39;12345 & # 39;,,3);//,PHP 弃用:,,():大小写敏感,Non-string  needles  will  be  interpreted  as  strings 拷贝,未来

除了默认触发消息外,用户也可以使用,<代码> set_error_handler> E_ERROR ,<代码> E_PARSE ,<代码> E_CORE_ERROR ,<代码> E_CORE_WARNING ,<代码> E_COMPILE_ERROR ,<代码> E_COMPILE_WARNING>

 set_error_handler  (, callable  error_handler 美元;[,int  error_types 美元;=,E_ALL  |, E_STRICT ],),:,混合

示例

 & lt; php ?//,E_ALL 安康;处理全部错误类型
  set_error_handler (& # 39; customError& # 39;,, E_ALL);/* *
  ,* @param , int  errno 美元;错误的级别
  ,* @param , string  errstr 美元;,错误的信息
  ,* @param , string  errfile 美元;错误的文件名(可选)
  ,* @param , string  errline 美元;错误发生的行号(可选)
  ,*/function  customError (int  errno,美元,string  errstr美元,string  errfile美元,string  errline美元)
  {
  ,,,echo  sprintf(& # 39;错误消息为,% & # 39;,,errstr美元);
  }
  
  a 美元;=,5,/,0;,,//,错误消息为,Division  by  0 

PHP错误与异常的处理