PHP中的错误与异常

错误和异常是两个不同的概念

留待日后补充

1.错误

错误的分类:

  • 语法错误
  • 环境错误
  • 逻辑错误

错误级别

常见的错误级别:

  • Deprecated最低级别错误(脚本继续执行)
  • Notice通知级别错误(脚本继续执行)
  • Warning警告级别错误(脚本继续执行)
  • FatalError致命级别错误(脚本终止执行)
  • ParseError语法解析错误(脚本终止执行)

PHP配置文件中(php.ini)与错误有关的配置

配置选项描述
error_reporting设置错误报告的级别
display_errors是否显示错误
log_errors设置产生的错误信息是否记录到错误日志中,或者是error_log中
log_error_max_len设置log_errors最大字节数
ignore_repeated_errors是否忽略重复的错误信息
ignore_repeated_source是否忽略重复错误消息的来源
track_errors如果开启此选项,最后一个错误将永远保存在$php_errormsg中

设置错误级别

  • 一、直接在php.ini文件中更改:error_reporting的值;

  • 二、通过函数:error_reporting()进行设置

  • 示例:

error_reporting(E_NOTICE);//仅显示notice级别的错误
error_reporting(E_ALL&~E_NOTICE);//除了notice级别的错误不可见,其他级别的错误都可见
error_reporting(0);//所有错误都不显示
echo $aa;
echo md4('asd');
  • 三、也可以通过ini_set()函数进行设置
    • 第一个参数是设置的配置文件中配置选项的名称
    • 第二个参数是配置的值
    • 示例:ini_set('error_reporting',-1);//显示所有错误
  • 解析错误是否能显示,不能通过error_reporting()函数进行设置

手动触发错误

  • 通过:trigger_error()函数,触发一个错误,类似try…catch…中的throw的功能
    • 第一个参数:字符串类型,错误信息
    • 第二个参数:常量,错误级别
    • 使用示例:trigger_error("出错了",E_USER_NOTICE),触发一个notice级别的错误

将错误日志保存在指定文件中

  • 一、直接修改php配置文件,修改error_log选项的值,路径设置为你想保存的路径
  • 二、通过ini_set函数进行设置;
  • 在PHP中,记录错误数据到指定文件中:
    • 使用:error_log('string')函数,可以主动将错误保存到指定的错误日志文件中

自定义错误处理函数

  • 使用:set_error_handler()函数可以自定义处理错误
    • 第一个参数:自定义处理函数名称
    • 第二个参数:错误级别
    • 这个函数只能捕获部分错误,例如fatalError级别的错误就无法捕获,
    • 这个函数类似魔术方法,它就是把处理错误的方法,交给开发者自己去实现
    • 如果不想自己处理,可以通过restore_error_handler()回收这个权限,该函数执行后,后续的错误将使用系统实现方式显示错误
    • 示例:
function customError($errno,$errMsg,$filePath,$line){

    echo "<b>错误</b>:{$errno}:{$errMsg},来自{$filePath}文件的第{$line}行";

}

set_error_handler('customError');

echo $a;

register_shutdown_function函数

  • 作用是:在产生致命错误,导致脚本即将结束执行的时候,这个函数会被调用
    • 参数1:回调函数的名称
    • 参数2:可以通过传入额外的参数来将参数传给回调函数
  • 这个函数是在内存中调用的,所以在函数中访问的路径必须是绝对路径

2.异常

  • 异常需要主动抛出,否则,catch语句将永远不会执行
  • throw语句之后的所有代码将不会执行
  • 在一些特殊的类中是内置了throw的,例如PDO类中,不需要你手动的去抛出错误

错误和异常的区别

  • 首先,当PHP脚本发生错误必须立即处理,而异常则不用马上处理
  • 错误是不可预知的,而异常是可预知的,例如一段代码有可能会发生意外情况,这个是可预知的
  • 而错误则可能因为你的语法错误、环境配置问题等各种问题,不可预知
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值