当前位置: 首页 > news >正文

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
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

下面是两个代码示例:

http://www.lryc.cn/news/308014.html

相关文章:

  • Nginx 解析漏洞复现
  • JQMobile Loader Widget 遮罩层改造
  • 练习 2 Web [ACTF2020 新生赛]BackupFile 1
  • 【python】subprocess用法示例
  • Socket网络编程(三)——TCP快速入门
  • 皇冠测评:网络电视盒子哪个品牌好?电视盒子排行榜
  • simple-pytest 框架使用指南
  • React中使用useActive
  • ElasticSearch安装和kibana控制台安装
  • VSCode安装与使用详细教程
  • 土壤墒情监测站的工作原理
  • Flutter 多标签页显示 有关TabController需要知道的知识
  • 【Elasticsearch专栏 16】深入探索:Elasticsearch的Master选举机制及其影响因素分析
  • Leetcode : 215. 数组中的第 K 个最大元素
  • node express实现Excel文档转json文件
  • 【算法分析与设计】最大二叉树
  • 面试问答总结之并发编程
  • 红外测温仪芯片方案开发设计
  • 五、数组——Java基础篇
  • 如何用golang写一个自己的后端框架
  • linux 如何给服务器批量做免密,如何批量挂在磁盘
  • Android Activity的生命周期详解
  • python学习笔记-内置类型
  • 校园微社区微信小程序源码/二手交易/兼职交友微信小程序源码
  • 如何在 Angular 中使用 NgTemplateOutlet 创建可重用组件
  • 改进的yolo交通标志tt100k数据集目标检测(代码+原理+毕设可用)
  • nginx 日志,压缩,https功能介绍
  • 代码随想录三刷day17
  • postcss-px-to-viewport include属性
  • C++设计模式——抽象工厂模式