首页 » Web前端 » php不显示毛病技巧_一路搞懂PHP的缺点和异常一

php不显示毛病技巧_一路搞懂PHP的缺点和异常一

访客 2024-10-23 0

扫一扫用手机浏览

文章目录 [+]

我们将用一系列的文章来彻底的搞懂PHP中的缺点和非常到底是怎么回事,有哪些处理这些缺点和非常的机制,我们该当如何对待它们。

什么是缺点?

缺点,一样平常是由PHP本身的成分所导致的问题,缺点的语法、环境的配置不当等都会引起缺点。
缺点和php.ini文件当中的error_reporting参数有直接的关系。
相信大家都配过这个参数。
一样平常会把它配置为 E_ALL & ~E_NOTICE 。
这是什么意思呢?我们先来看看PHP中有哪些缺点类型:

php不显示毛病技巧_一路搞懂PHP的缺点和异常一

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 // 用户产生的关照信息。

在配置文件中的 E_ALL & ~E_NOTICE 便是显示所有缺点但关照缺点类缺点除外的意思。
当然,我们在代码中也可以手动的改变这种缺点信息的关照。

php不显示毛病技巧_一路搞懂PHP的缺点和异常一
(图片来自网络侵删)

error_reporting(E_ALL);

通过这行代码,我们就让当前文件代码中的缺点全部显示出来了。
Notice 和 Warning 类型的缺点是不会中断代码运行的,他们是关照和报警,并不是致命的缺点。
而其他类型的缺点则会中断代码的实行。

$a=100/0;//Warning:Divisionbyzeroecho$f;//Notice:Undefinedvariable:ftest();//Fatalerror:UncaughtError:Calltoundefinedfunctiontest()echo1;

上述代码等分别是Warning的除0缺点警告和echo $f;的未定义变量提示,这两行代码都是可以在报错后可以连续向下运行的。
而未定义的方法则是Fatal级别的致命缺点了。
以是末了那个1也不会输出了。

那么缺点要如何处理呢?原则上我们该当是要去消灭这些缺点的,由于他们基本上不会是我们写代码的逻辑没理清而产生的逻辑缺点,是实打实的一些语法及环境缺点,这种缺点在生产环境是不应该涌现的。
同时,它们与非常最最主要的一个差异便是,它们无法通过try...catch进行捕获。
也便是说,这种缺点没有非常好的缺点后处理机制。

try{$a=100/0;//Warning:Divisionbyzeroecho$f;//Notice:Undefinedvariable:f}catch(Excepiton$e){print_r($e);//无法捕获}

不过,PHP还是供应了一些处理缺点的函数供我们利用。

set_error_handler()

基本上只能处理 Warning 和 Notice 级别的缺点。

set_error_handler(function($errno,$errstr){echo'set_error_handler:',$errno,$errstr,PHP_EOL;});$a=100/0;//Warning:Divisionbyzeroecho$f;//Notice:Undefinedvariable:ftest();//Fatalerror:UncaughtError:Calltoundefinedfunctiontest()//set_error_handler:2Divisionbyzero//set_error_handler:8Undefinedvariable:f

从代码中可以看出,Fatal error这种致命缺点并没有捕获到。

register_shutdown_function()

实在它也不是用来处理缺点的,这个函数的浸染是在发生致命缺点,程序停滞前末了会调用的一个函数。
可以用来记录日志或者关闭一些主要的外部句柄,不过在生产环境中,我们一样平常会用php.ini中的log_error来进行日志的记录。
以是这个函数也用得并不多。

register_shutdown_function(function(){echo'register_shutdown_function:',PHP_EOL;print_r(error_get_last());});test();//register_shutdown_function://Array//(//[type]=>1//[message]=>UncaughtError:Calltoundefinedfunctiontest()in/php/202002/source/一起搞懂PHP的缺点和非常(一).php:16//Stacktrace://#0{main}//thrown//[file]=>/php/202002/source/一起搞懂PHP的缺点和非常(一).php//[line]=>16//)

这个函数的回调函数中没有任何的参数变量,以是我们须要通过 error_get_last() 来拿到本次实行中发生的所有缺点情形。
其余要把稳的是,只有在运行时产生的缺点都会调用到这个注册函数的回调中,编译时的缺点是也是无法通过这个函数捕获到的,比如直接的语法缺点:

register_shutdown_function(function(){echo'register_shutdown_function:',PHP_EOL;print_r(error_get_last());});test(a+-);//Parseerror:syntaxerror,unexpected')'总结

综上所述,就像在文章前面说过的,缺点是该当只管即便不要带莅临盆环境中去的,它们并没有很好的处理机制。
或者说,缺点便是我们要只管即便避免的东西,由于大部分情形下它和我们的逻辑代码并没有太大的关系。
而且严重的缺点会直接导致程序运行的中止,无法像非常一样通过catch机制担保程序连续运行。

下一篇我们将连续学习下一个知识点:非常及其处理机制。

测试代码: https://github.com/zhangyue0503/dev-blog/blob/master/php/202002/source/%E4%B8%80%E8%B5%B7%E6%90%9E%E6%87%82PHP%E7%9A%84%E9%94%99%E8%AF%AF%E5%92%8C%E5%BC%82%E5%B8%B8%EF%BC%88%E4%B8%80%EF%BC%89.php

参考文档: https://www.cnblogs.com/zyf-zhaoyafei/p/6928149.html https://www.php.net/manual/zh/language.errors.basics.php https://www.php.net/manual/zh/errorfunc.constants.php https://www.php.net/manual/zh/errorfunc.configuration.php#ini.error-reporting https://www.php.net/manual/zh/function.error-reporting.php https://www.php.net/manual/zh/function.set-error-handler.php https://www.php.net/manual/zh/function.register-shutdown-function.php

标签:

相关文章

房山第一探寻历史文化名区的魅力与发展

房山区,位于北京市西南部,历史悠久,文化底蕴深厚。作为北京市的一个重要组成部分,房山区的发展始终与首都的发展紧密相连。房山区积极推...

Web前端 2025-02-18 阅读1 评论0

手机话费开钻代码数字时代的便捷生活

我们的生活越来越离不开手机。手机话费作为手机使用过程中的重要组成部分,其充值方式也在不断创新。手机话费开钻代码应运而生,为用户提供...

Web前端 2025-02-18 阅读1 评论0

探寻专业奥秘如何查询自己专业的代码

计算机科学已成为当今社会不可或缺的一部分。掌握一门专业代码对于个人发展具有重要意义。面对繁杂的学科体系,如何查询自己专业的代码成为...

Web前端 2025-02-18 阅读1 评论0