php5与php7的错误

本文对比了PHP5和PHP7的错误处理方式,阐述了PHP7如何将大多数错误转换为Error异常,允许开发者通过try/catch块进行捕获。同时介绍了set_error_handler(), register_shutdown_function(), set_exception_handler()等函数在错误和异常处理中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

示例一:

php版本:7.1.17

<?php
	try{
	   //test类不存在
		new test();  
	}catch(Throwable $e){
		var_dump($e->getPrevious());
		var_dump($e->getMessage());
	}
	
	var_dump("hello php7");

运行结果:
在这里插入图片描述
示例二:

php版本:5.6.38

<?php
	try{
		new test();
	}catch(Throwable $e){
		var_dump($e->getMessage());
	}
	
	var_dump("hello php5");

运行结果:
在这里插入图片描述

同样类不存在的错误,php7中是可以通过try{}catch()捕获的到。php5中直接中止程序运行。

官方解释:(地址:http://php.net/manual/zh/language.errors.php7.php)

PHP 7 改变了大多数错误的报告方式。不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出。
这种 Error 异常可以像 Exception 异常一样被第一个匹配的 try / catch 块所捕获。如果没有匹配的 catch 块,则调用异常处理函数(事先通过 set_exception_handler() 注册)进行处理。 如果尚未注册异常处理函数,则按照传统方式处理:被报告为一个致命错误(Fatal Error)。
Error 类并非继承自 Exception 类,所以不能用 catch (Exception $e) { … } 来捕获 Error。你可以用 catch (Error $e) { … },或者通过注册异常处理函数( set_exception_handler())来捕获 Error。

当然如果是语法错误等一些编译错误。php5和php7都将直接中止错误。

在生产环境中一般都将php的错误显示级别(display_errors)设置为off,即不显示所有错误,直接报500错误,因此需要通过php的内置函数来记录错误或者异常。

函数如下:

  1. set_error_handler() 设置用户自定义处理错误的函数。(官方文档地址:http://www.php.net/manual/zh/function.set-error-handler.php)
  2. register_shutdown_function() 设置一个在php中止前执行的函数(官方文档地址:http://www.php.net/manual/zh/function.register-shutdown-function.php)
  3. set_exception_handler() 设置默认的异常处理函数,如果程序中止前没有程序来捕获异常,将出发该函数。(官方文档地址:http://www.php.net/manual/en/function.set-exception-handler.php)

官方文档中已有详细使用教程,此处不宜赘述。个人理解不喜勿喷。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值