php基础学习之错误处理(其一)

一,错误处理的概念

错误处理指的是系统(或者用户)在执行某些代码的时候,发现有错误,就会通过错误处理的形式告知程序员,俗称报错


二,错误分类

  1. 语法错误:书写的代码不符合 PHP 的语法规范,语法错误会导致代码在编译过程中不通过,所以代码不会执行(parse error)
  2. 运行时错误:代码编译通过,但是在执行过程中出现一些条件上的不满足导致的错误(runtime error)
  3. 逻辑错误:书写的代码在逻辑上出现的错误,导致代码正常执行但是得不到想要的结果

三,错误代号(常量)

(一)系统错误

  • E_ERROR:fatal error,致命错误,代码在错误处会中断执行
  • E_WARNING:warning,警告错误,不影响代码执行,但可能得到意想不到的结果
  • E_PARSE:编译错误,代码不会执行
  • E_NOTICE:notice,通知错误,不影响代码执行

(二)php启动错误

  • E_CORE_ERROR: PHP 启动时遇到致命错误。这与 E_ERROR 类似,但是是由 PHP 引擎的核心部分引发的。
  • E_CORE_WARNING: PHP 启动时的非致命警告。这与 E_WARNING 类似,但是由 PHP 引擎的核心部分引发的。

(三)包含代码错误

  • E_COMPILE_ERROR: 编译时致命错误。这些错误由编译器检测到,通常在包含或包含代码时发生。
  • E_COMPILE_WARNING: 编译时的非致命警告。这些警告由编译器检测到,通常在包含或包含代码时发生。

(四)用户错误

  • E_USER_ERROR
  • E_USER_WARNING
  • E_USER_NOTICE

用户在使用自定义错误触发时,会使用到的错误代码(系统用不到)

(五)其它错误

  • E_STRICT: 编码标准警告。这些警告指示代码中的编码标准问题,可能影响代码的兼容性或可维护性。
  • E_RECOVERABLE_ERROR: 可恢复的致命错误。这些错误表示脚本可以捕获并处理,但通常会导致脚本终止。
  • E_DEPRECATED: 代码已经过时的警告。这些警告表示使用了已经被废弃或不推荐使用的功能,可能会在未来的 PHP 版本中被移除。
  • E_USER_DEPRECATED: 用户生成的已弃用警告。这些警告由用户在代码中使用 trigger_error() 函数生成。
  • E_ALL,代表所有错误(通常在进行错误控制的时候使用较多),建议在开发过程中使用

(六)错误代号(常量)的底层原理

所有以E开头的错误代号(常量)其实都是二进制串,对于这一点,下面这段脚本给出了验证

php 复制代码
<?php
var_dump(E_ERROR);//1 -> 0001
echo "<-E_ERROR<br>";

var_dump(E_WARNING);//2 -> 0010
echo "<-E_WARNING<br>";

var_dump(E_PARSE);//4 -> 0100
echo "<-E_PARSE<br>";

var_dump(E_NOTICE);//8 -> 1000
echo "<-E_NOTICE<br>";

var_dump(E_CORE_ERROR);//16 -> 0001 0000
echo "<-E_CORE_ERROR<br>";

var_dump(E_CORE_WARNING);//32 -> 0010 0000
echo "<-E_CORE_WARNING<br>";

var_dump(E_COMPILE_ERROR);//64 -> 0100 0000
echo "<-E_COMPILE_ERROR<br>";

var_dump(E_COMPILE_WARNING);//128 -> 1000 0000
echo "<-E_COMPILE_WARNING<br>";

var_dump(E_USER_ERROR);//256 -> 0001 0000 0000
echo "<-E_USER_ERROR<br>";

var_dump(E_USER_WARNING);//512 -> 0010 0000 0000
echo "<-E_USER_WARNING<br>";

var_dump(E_USER_NOTICE);//1024 -> 0100 0000 0000
echo "<-E_USER_NOTICE<br>";

var_dump(E_STRICT);//2048 -> 1000 0000 0000
echo "<-E_STRICT<br>";

var_dump(E_RECOVERABLE_ERROR);//4096 -> 0001 0000 0000 0000
echo "<-E_RECOVERABLE_ERROR<br>";

var_dump(E_DEPRECATED);//8192 -> 0010 0000 0000 0000
echo "<-E_DEPRECATED<br>";

var_dump(E_USER_DEPRECATED);//16384 -> 0100 0000 0000 0000
echo "<-E_USER_DEPRECATED<br>";

var_dump(E_ALL);//32767 -> 0111 1111 1111 1111
echo "<-E_ALL<br>";

如果想进行一些错误的控制,则可以利用这一点来使用位运算进行操作

例如:

E_ALL & ~E_NOTICE:排除E_NOTICE之外的其它错误

E_WARNING | E_NOTICE:只显示E_WARNING和E_NOTICE错误


四,错误触发

(一)程序运行时触发

系统自动根据错误发生后,显示对应的错误信息,主要针对代码的语法错误和运行时错误

例如:进行除法运算时,误使除数为0

(二)人为触发

知道某些逻辑可能会出错,从而使用对应的判断代码来触发响应的错误提示

(*)trigger_error()函数

使用trigger_error()函数来认为触发错误

trigger_error()函数有两个参数,第一个参数接收一个字符串 (该字符串将在错误触发时被输出);第二个参数接收一个错误代号(常量) (第二个参数可以不填,如果不填则默认是Notice级别,如果要填,则会填本篇【三.(四)】中描述到的三个用户自定义错误,用于修改错误的级别

  • E_USER_ERROR
  • E_USER_WARNING
  • E_USER_NOTICE

下面是两个代码示例:

相关推荐
鹏仔先生2 小时前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下7 小时前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip7 小时前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
酉鬼女又兒10 小时前
零基础入门计算机网络运输层:端到端通信核心作用、端口号分类规则、复用分用工作机制及UDP与TCP协议全方位对比详解
网络·网络协议·tcp/ip·计算机网络·考研·udp·php
dog25010 小时前
不要再继续优化 TCP
网络协议·tcp/ip·php
Channing Lewis10 小时前
PHP 解析 Excel 的那些坑:一次“行号错位”引发的数据丢失
开发语言·php·excel
Cheng小攸11 小时前
渗透行为分析与检测
开发语言·php
云水一下12 小时前
从零开始学 PHP 系列(六):MySQL 数据库与 PHP 交互——让数据真正“住”进服务器
数据库·mysql·php
qq_4523962313 小时前
第十四篇:《K8s 网络模型与 CNI 插件(Calico、Flannel、Cilium)》
网络·kubernetes·php
云水一下13 小时前
从零开始学 PHP 系列(五):Web 表单处理与文件上传——让网站“活”起来
开发语言·php