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

下面是两个代码示例:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/414229.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

协议-http协议-基础概念01-发展历程-http组成-http是什么-相关的应用-相关的协议

发展历程-http组成-http是什么-相关的应用-相关的协议 参考来源&#xff1a; 极客时间-透视HTTP协议(作者&#xff1a;罗剑锋)&#xff1b; 01-HTTP的发展历程 1989 年&#xff0c;任职于欧洲核子研究中心&#xff08;CERN&#xff09;的蒂姆伯纳斯 - 李&#xff08;Tim Ber…

异地文件共享慢如何解决?

如今&#xff0c;随着信息化的迅猛发展&#xff0c;异地文件共享已经成为了许多企业和个人不可或缺的一部分。在实际应用过程中&#xff0c;我们常常会遇到异地文件共享速度缓慢的问题。本文将深入探讨异地文件共享慢的原因&#xff0c;并介绍一种解决方案——天联组网&#xf…

R语言数学建模(一)—— 基础知识

R语言数学建模&#xff08;一&#xff09;—— 基础知识 文章目录 R语言数学建模&#xff08;一&#xff09;—— 基础知识前言一、建模软件1.1 软件建模的基础1.2 模型的分类1.3 不同类型模型间的联系1.4 一些术语1.5 建模如何适应数据分析过程 二、Tidyverse基础2.1 tidyvers…

【mysql】1812 - Tablespace is missing for table `job`.`xxl_job_log`.

打开表提示&#xff1a; 1812 - Tablespace is missing for table job.xxl_job_log. 1812-表“job”缺少表空间xxl_job_log。 尝试删除表重建表 DROP TABLE IF EXISTS job.xxl_job_log; 提示&#xff1a; 1051 - Unknown table job.xxl_job_log 1051-未知表“job.xxl_job_lo…

什么是去中心化云计算?

去中心化云计算是一种新型的云计算方式&#xff0c;它与传统的中心化云计算不同&#xff0c;将数据和计算任务分布到多个节点上&#xff0c;而不是将数据集中存储在中心服务器上。这种云计算方式具有许多优势&#xff0c;包括提高数据安全性、降低运营成本、增强可扩展性和灵活…

【监督学习之模型选择与评估】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 简述概要知识图谱1. 模型选择&#xff1a;2. 模型评估&#xff1a;3. 超参数调优&#xff1a;4. 最终模型选择&#xff1a;实践建议&#xff1a; 详细内容总结 简述概要 了解模型选择与评估 知识图谱 在监督学习中&…

CV论文--2024.2.28

source:CV论文--2024.2.28 1、StreamDiffusion: A Pipeline-level Solution for Real-time Interactive Generation 中文标题&#xff1a;StreamDiffusion: 一个用于实时交互生成的管道级解决方案 简介&#xff1a;我们介绍了StreamDiffusion&#xff0c;这是专为实时交互式图…

RK3568平台 RTC时间框架

一.RTC时间框架概述 RTC&#xff08;Real Time Clock&#xff09;是一种用于计时的模块&#xff0c;可以是再soc内部&#xff0c;也可以是外部模块。对于soc内部的RTC&#xff0c;只需要读取寄存器即可&#xff0c;对于外部模块的RTC&#xff0c;一般需要使用到I2C接口进行读取…

prometheus+grafana监控nginx的简单实现

1.编译安装NGINX 加入编译安装nginx-module-vts模块,目的是为了获取更多的监控数据(虚拟主机&#xff0c;upstream等) nginx下载 http://nginx.org/download/nginx-1.20.2.tar.gz nginx-module-vts下载 https://github.com/vozlt/nginx-module-vts/archive/refs/tags/v0.2…

自然语言处理: 第十三章Xinference部署

项目地址: Xorbitsai/inference 理论基础 正如同Xorbits Inference&#xff08;Xinference&#xff09;官网介绍是一个性能强大且功能全面的分布式推理框架。可用于大语言模型&#xff08;LLM&#xff09;&#xff0c;语音识别模型&#xff0c;多模态模型等各种模型的推理。通…

在PyCharm中使用Git

安装Git CMD检查Git版本 打开cmd&#xff0c;输入git version&#xff0c;检查当前下载版本 配置git的user信息 在cmd中输入 git config --global user.name "用户名"git config --global user.email "用户邮箱"输入&#xff1a;git config --list&…

Linux下性能分析的可视化图表工具

1 sar 和sadf 1.1 简介 sar命令可以记录系统下的常见活动信息&#xff0c;例如CPU使用率、网络统计数据、Block I/O数据、内存使用情况 等。 sar命令的“-o [file_name]”参数可以将系统活动数据记录到file_name文件&#xff0c;然后通过sadf来解析&#xff0c;sadf命令的“-g…

音频混音算法的实现

最近项目有用到混音算法&#xff0c;这里用比较常见的一种&#xff0c;就是简单的加和之后做一下归一化。 是参考这个博主实现的&#xff1a; 音频混音的算法实现 下面直接贴代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <math.h&…

【王道数据结构】【chapter7查找】【P285t5】

线性表中各节点的检索概率不等时&#xff0c;可用如下策略提高顺序检索的效率&#xff1b;若找到指定的结点&#xff0c;则将该结点和其前驱结点&#xff08;若存在&#xff09;交换&#xff0c;使得经常被访问的结点尽量位于表的前端。试设计在顺序结构和链式结构的线性表盘上…

计算机网络:深入探索HTTP

引言&#xff1a; HTTP&#xff0c;全称超文本传输协议&#xff08;Hypertext Transfer Protocol&#xff09;&#xff0c;是互联网上数据通信的基础。它定义了客户端&#xff08;如浏览器&#xff09;和服务器之间如何交互和传输数据。HTTP最初是为了支持Web浏览而设计的&…

Flink动态分区裁剪

1 原理 1.1 静态分区裁剪与动态分区裁剪 静态分区裁剪的原理跟谓词下推是一致的&#xff0c;只是适用的是分区表&#xff0c;通过将where条件中的分区条件下推到数据源达到减少分区扫描的目的   动态分区裁剪应用于Join场景&#xff0c;这种场景下&#xff0c;分区条件在joi…

南京师范大学计电院数据结构课设——排序算法

1 排序算法 1.1 题目要求 编程实现希尔、快速、堆排序、归并排序算法。要求首先随机产生10000个数据存入磁盘文件&#xff0c;然后读入数据文件&#xff0c;分别采用不同的排序方法进行排序并将结果存入文件中。 1.2 算法思想描述 1.2.1 随机数生成 当需要生成一系列随机数…

C#理论 —— WPF 应用程序Console 控制台应用

文章目录 1. WPF 应用程序1.1 工程创建1.2 控件1.2.1 控件的公共属性1.2.1 TextBox 文本框1.2.1 Button 按钮 *. Console 控制台应用1.1 工程创建 1. WPF 应用程序 1.1 工程创建 Visual Studio 中新建项目 - 选择WPF 应用程序&#xff1b; 1.2 控件 1.2.1 控件的公共属性 …

RunnerGo UI自动化测试脚本如何配置

RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块&#xff0c;覆盖了整个产品测试周期。 RunnerGo UI自动化基于Selenium浏览器自动化方案构建&#xff0c;内嵌高度可复用的测试脚本&#xff0c;测试团队无需复杂的代码编写即可开展低代码的自动化…

Ubuntu Mysql Innodb cluster集群搭建+MaxScale负载均衡(读写分离)

Ubuntu系统版本 20.04.3 LTS (Focal Fossa) 、64位系统。 cat /etc/os-release查看Ubuntu系统是32位还是64位 uname -m如果显示“i686”,则表示安装了32位操作系统。如果显示“x86_64”,则表示安装了64位操作系统。 一、安装MySql 参考: https://blog.csdn.net/qq_3712…