首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SimpleTest:如何断言抛出PHP错误?

在PHP中,我们可以使用trigger_error()函数来抛出一个错误,并使用set_error_handler()函数来自定义错误处理函数。在这个例子中,我们将创建一个简单的测试函数,使用trigger_error()抛出一个错误,然后使用set_error_handler()函数来捕获并断言这个错误。

首先,我们创建一个简单的测试函数simpleTest(),它将使用trigger_error()抛出一个错误。

代码语言:php
复制
function simpleTest() {
    trigger_error("This is a test error", E_USER_ERROR);
}

接下来,我们将使用set_error_handler()函数来自定义错误处理函数。在这个例子中,我们将创建一个名为customErrorHandler()的函数,它将接收错误信息、错误类型和错误文件。我们将使用assert()函数来断言错误信息是否符合预期。

代码语言:php
复制
function customErrorHandler($error_number, $error_message, $error_file, $error_line) {
    assert($error_message === "This is a test error");
}

现在,我们可以在simpleTest()函数之前调用set_error_handler()函数,将自定义错误处理函数设置为当前错误处理函数。

代码语言:php
复制
set_error_handler("customErrorHandler");
simpleTest();

这个简单的测试将抛出一个错误,并使用customErrorHandler()函数来捕获并断言这个错误。如果错误信息与预期相符,assert()函数将不会抛出任何错误,否则将抛出一个断言错误。

完整的代码示例如下:

代码语言:php
复制
function simpleTest() {
    trigger_error("This is a test error", E_USER_ERROR);
}

function customErrorHandler($error_number, $error_message, $error_file, $error_line) {
    assert($error_message === "This is a test error");
}

set_error_handler("customErrorHandler");
simpleTest();

请注意,这个示例仅用于演示如何使用trigger_error()set_error_handler()函数来抛出和捕获错误。在实际应用中,您可能需要根据具体需求来自定义错误处理函数。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何找到抛出ORA-00933错误的SQL

blog.csdn.net/bisal/article/details/103137639 前几天上线,凌晨3点多打车回来的路上,兄弟联系我,提了一个问题,某核心系统,上线的时候,报了很多ORA-00933的错误...,明显是应用写的SQL出现了错误导致的,但是因为未将出错的SQL打印到日志中,所以不知道究竟是什么SQL出错了,由于逻辑中涉及到很多的SQL,逐个排查,非常耗时。...ORA-00933,意思是“SQL command not properly ended”,明显是SQL的语法出现错误,但是现在的问题,就是如何找到错误的SQL?...我们执行如下这两条SQL,第一条是错误的,提示ORA-00933,第二条是正确的, SQL> select object_id from t whereobject_id=1; select object_id...其中一项,就是应用执行错误的SQL语句需要打印到应用日志中,包括SQL原文、报错信息、参数等,一方面为监控报警提供数据,另一方面便于问题的排查。

2.5K30

nginx不提示php错误如何解决

本篇内容主要讲解“nginx不提示php错误如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nginx不提示php错误如何解决”吧!...一、理解错误报告及搜集方法 在部署服务器的过程中,我们习惯性地关闭了PHP错误输出,这是因为PHP错误信息可能会导致安全隐患暴露,或导致信息泄露。...但是在开发过程中,我们需要这些错误信息来定位问题和调试程序。 解决这一问题的方法之一是打开PHP错误输出。在PHP中我们可以设置错误日志级别或者即时报告错误。...用于向Nginx服务器请求的PHP进程传递错误信息。 ...错误如何解决”有了更深的了解,不妨来实际操作一番吧!

95710

如何PHP添加多个错误处理函数

一些常规的PHP框架都会对PHP错误、异常进行异常处理封装,方便框架日志记录,开发的时候方便处理。我们先看看几个框架错误处理: Laravel ?...Laravel在app初始化的时候注册了错误处理函数,异常处理函数,异常退出处理函数,最终将错误转化成异常抛出,统一通过异常处理函数进行处理。 Yii2 ? ? ?...Yii2 在application构造函数中初始化ErrorHandler组件,通过调用register方法注册错误处理,将PHP错误转换成异常,通过异常处理方式显示处理。...thinkphp5.1在thinkphp\Base.php中使用Error::register()注册了错误处理函数。...在错误处理函数中将错误转换成异常记录日志输出错误提示 上述三种PHP框架对错误的处理都差不多,都使用的是set_error_handler,register_shutdown_function两个函数。

1.8K20

php7 错误处理机制修改实例分析

---- PHP 7 错误处理 PHP 7 改变了大多数错误的报告方式。不同于 PHP 5 的传统错误报告机制,现在大多数错误被作为 Error 异常抛出。...它能在生产环境中实现零成本的断言,并且提供抛出自定义异常及错误的能力。...– 不生成代码 (生产环境) assert.exception 0 1 – 断言失败时抛出,可以抛出异常对象,如果没有提供异常,则抛出 AssertionError 对象实例。...0 – 使用或生成 Throwable, 仅仅是基于对象生成的警告而不是抛出对象(与 PHP 5 兼容) 参数 assertion 断言。...exception 在 PHP 7 中,第二个参数可以是一个 Throwable 对象,而不是一个字符串,如果断言失败且启用了 assert.exception 该对象将被抛出

1.9K30

一起学习PHP断言函数的使用

一起学习PHP断言函数的使用 原来一直以为断言相关的函数是 PHPUnit 这些单元测试组件提供的,在阅读手册后才发现,这个 assert() 断言函数是 PHP 本身就自带的一个函数。...这时,PHP 就会返回一个警告或者异常错误。为什么有可能是两种错误形式呢?...这个参数其实就是控制是否以正宗的异常对象进行抛出。如果保持这个参数为默认情况也就是设置为 on 或者 1 的话,就会直接抛出异常,程序中止。...接下来我们看一下 assert() 函数的其他参数,它的第二个参数是两种类型,要么给一个字符串用来定义错误的信息,要么给一个 异常类 用于抛出异常。...在默认情况下,这个异常的抛出将中止程序的运行。也就是一个正常的异常抛出流程,我们可以使用 try...catch 进行异常的捕获。

93810

for 、foreach 、iterator 三种遍历方式的比较

(SimpleTest.java:46) 这又是为什么?...还是直接从错误入手: 定位到错误的位置 atjava.util.ArrayList$Itr.remove(ArrayList.java:872) ?...发现如果 lastRet 的值小于 0就会抛出非法状态的异常,这个lastRet是什么? 且看定义: ? lastRet的赋值场景 ?...(SimpleTest.java:50) 很不幸,这段代码也抛出了异常,直接从错误处入手发现,这个remove()方法调用的是AbstractList中的remove方法,跟进入发现有一段代码 ?...也就是说,只要这段代码执行了,都会报错,抛出异常 后记: 上述文章主要介绍了 for循环、foreach 循环、iterator 迭代器遍历元素的速度大小的比较 还介绍了各自遍历过程中 对remove操作的影响

1.8K30

优雅的输出错误-assert

在正常情况,我们会通过,if,else进行判断一个接口的条件是否满足,不满足则输出错误,例如 在IM系统中,申请入群接口,需要以下判断: $param = $this->request()->getRequestParam...assert($condition,$msg){     //断言条件一定满足,不满足则抛出异常     if ($condition!...$userInfo,'你已经是本群成员'); }catch (\Throwable $throwable){     //拦截抛出的异常,然后直接输出json 错误消息     $this->writeJson...:  断定条件为真,使代码继续往下执行,断言抛出异常为,条件错误抛出....如果觉得拗口,可以改为logicCheck,直接判断为真则抛出异常即可 本文为仙士可原创文章,转载无需和我联系,但请注明来自仙士可博客www.php20.cn

1.3K20

PHP 7 新特性

> 以上程序执行输出结果为: 723 -64 十、PHP 7 异常 PHP 7 异常用于向下兼容及增强旧的assert()函数。它能在生产环境中实现零成本的断言,并且提供抛出自定义异常及错误的能力。...- 不生成代码 (生产环境) assert.exception0 1 - 断言失败时抛出,可以抛出异常对象,如果没有提供异常,则抛出 AssertionError 对象实例。...0 - 使用或生成 Throwable, 仅仅是基于对象生成的警告而不是抛出对象(与 PHP 5 兼容) 参数 assertion 断言。...exception 在 PHP 7 中,第二个参数可以是一个 Throwable 对象,而不是一个字符串,如果断言失败且启用了 assert.exception 该对象将被抛出。...> 十二、PHP 7 错误处理 PHP 7 改变了大多数错误的报告方式。不同于 PHP 5 的传统错误报告机制,现在大多数错误被作为 Error 异常抛出

1.6K40

PHP错误与异常

图片 这篇文章基于PHP7 从PHP7起,PHP对异常做了较大改变,引入了Error,调整了继承结构Stringable这是个interface,只要能转字符串的类都应该实现这个接口Throwable能被...throw抛出的最基本的接口,但是PHP不允许直接实现这个接口Exception所有用户级异常的基类,想要自定义异常就可以继承这个LogicException代码逻辑错误,就是代码写的不对BadFunctionCallException...如果回调函数未定义或缺少参数的时候,抛出这个异常BadMethodCallException如果回调方法未定义或缺少参数的时候,抛出这个异常DomainException如果一个值不在有效的值列表中,则抛出这个异常...Error内部错误的基类TypeError类型不匹配ArgumentCountError参数数量不匹配ArithmeticError数学运算错误DivisionByZeroError除零错误AssertionError...断言失败错误CompileError编译错误ParseError解析PHP代码错误ValueError传值错误UnhandledMatchErrormatch未被匹配到任何分支FiberError在纤程上执行无效操作

2.3K10

不会Phpunit单元测试PHPer写不出高质量的代码

单元测试是什么意思 它可以减少一些细节错误的发生,如错误报告时是否没有错误,输入参数和结果是否符合要求等。 便于今后的改造和维护。...断言 为了更详细地理解断言,我推荐一个博客:https://www.jianshu.com/p/9b8c88deed6a 在软件测试中,特别是在单元测试中,一个必要的功能是“断言”。...php如何集成单元测试 PHP的单元测试依赖一个测试框架:phpunit(官方文档:https://phpunit.readthedocs.io/zh_CN/latest/index.html ) 如何安装...断言函数 作用 示例 assertEquals(\$except, \$value) 断言相等 $this->assertEquals(2, 1 + 1) assertEmpty($value) 断言为空...2 1 + 1 = 2 4 3 1 + 2 = 3 5 5 2 + 3 = 5 6 8 3 + 5 = 8 … … … 12 144 55 + 89 = 144 异常输入的情况处理 处理为0,或者抛出异常均可

1.3K20

走进Java接口测试之Mock(概念篇)

那么如何简便地构造接口的异常数据? 场景三:依赖接口性能参数无法保障。在对接口性能压测的时候,需要下游接口及时返回数据,满足上游接口的调用频度。在依赖接口多的情况下,如何减轻工作量?...在最后断言的时候,也可以通过这个 list 里面确实有这个值。所以,通过这种方式,我们可以进行对象构造。可以是类,也可以是接口。 除了构造对象,当然也可以对方法设定的返回值指定异常。...上述代码的意思就是当调用 list 的第二个元素的时候,抛出一个运行异常。...public class SimpleTest { @Test public void test(){ // 创建Mock对象,参数可以是类或者接口 List...)); String result = list.get(0); //验证方法调用 verify(list).get(0); //断言

11K20

PHPUnit 单元测试都不会的 PHPer 没法写出高质量的代码

单元测试有什么意义 可以 减少一些细节错误的发生 ,比如应该报错的情况没有报错,入参、结果是否与需求对应上等。...断言 想要更加细致的了解断言的话,这里推荐一篇博客:https://www.jianshu.com/p/9b8c88deed6a 在软件测试特别是在单元测试时,必用的一个功能就是“断言”(Assert)...php如何集成单元测试 PHP的单元测试依赖一个测试框架:phpunit(官方文档:https://phpunit.readthedocs.io/zh_CN/latest/index.html ) 如何安装...断言函数 作用 示例 assertEquals(\$except, \$value) 断言相等 $this->assertEquals(2, 1 + 1) assertEmpty($value) 断言为空...2 1 + 1 = 2 4 3 1 + 2 = 3 5 5 2 + 3 = 5 6 8 3 + 5 = 8 … … … 12 144 55 + 89 = 144 异常输入的情况处理 处理为0,或者抛出异常均可

1.2K10

PHP7.+系列新特性和新变更

预期 它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。...以后可以使用这个这个进行断言测试 ini_set('assert.exception', 1); class CustomError extends AssertionError {} assert...错误和异常处理相关变更 PHP 7 改变了大多数错误的报告方式。不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出。...这也意味着,当发生错误的时候,以前代码中的一些错误处理的代码将无法被触发。 因为在 PHP 7 版本中,已经使用抛出异常的错误处理机制了。...(如果代码中没有捕获 Error 异常,那么会引发致命错误)。set_error_handle不一定接收的是异常,有可能是错误

65530

窥探Swift编程之错误处理与异常抛出

今天博客的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中是如何抛出异常的。在编译型语言中,错误一般分为编译错误和运行时错误。...在今天的博客中,先给出主动产生异常的几种情况,然后再给出如何处理被动异常。...一、主动退出程序的几种情况 在Objective-C中,在单元测试时我们会使用断言断言中条件满足时会产生异常,并打印出相应的断言错误,在Swift中也有几种产生异常的语法。...下方函数就是一个可以抛出错误的函数,抛出错误就是我们在上面枚举中所定义的类型。...也就是说,我们可以在抛出错误时,给自定义错误类型提供错误原因。该功能在开发中是非常常用的,而且用起来也是非常爽的。接下来就看一下如何为我们的错误类型添加错误原因。

2.2K50

PHPUnit 手册【笔记】

标注 ExceptionTest.php、ExpectedErrorTest.php E.对PHP错误进行测试 1.默认情况下PHPUnit将测试在执行中触发的PHP错误、警告、通知都转换为异常 2....PHP的error_reporting运行时配置会对PHPUnit将哪些错误转换为异常有所限制 3.对异常进行测试是越明确越好,对太笼统的类进行测试有可能导致不良副作用 4.如果测试依靠会触发错误PHP...通过抑制住错误通知,就能对返回值进行检查,否则会导致抛出异常 ErrorSuppressionTest.php F.对输出进行测试 1.有时候,想要断言(比如说)某方法的运行过程中生成了预期的输出(...三、命令行测试执行器 1.对于每个测试的运行,PHPUint命令行工具输出一个字符来指示进展: 【.】当测试成功时输出 【F】当测试方法运行过程中一个断言失败时输出 【E】当测试方法运行过程中产生一个错误时输出...【R】当测试被标记为有风险时输出 【S】当测试被跳过时输出 【I】当测试被标记为不完整或未实现时输出 2.PHPUnit区分失败(failure)与错误(error),失败是违背了PHPUnit断言

1.7K40

的新特性和新变更

; 11.预期 它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。...+ define('ALLOWED_IMAGE_EXTENSIONS', ['jpg', 'jpeg', 'gif', 'png']); #PHP7.0 变化 1.错误和异常处理相关变更 PHP 7 改变了大多数错误的报告方式...不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为 Error 异常抛出。 这也意味着,当发生错误的时候,以前代码中的一些错误处理的代码将无法被触发。...因为在 PHP 7 版本中,已经使用抛出异常的错误处理机制了。 (如果代码中没有捕获 Error 异常,那么会引发致命错误)。set_error_handle不一定接收的是异常,有可能是错误。...变更 1.传递参数过少时将抛出错误 过去我们传递参数过少 会产生warning。

1.3K30

PHP7新特性和变化

; 预期 它使得在生产环境中启用断言为零成本,并且提供当断言失败时抛出特定异常的能力。...不同于传统(PHP 5)的错误报告机制,现在大多数错误被作为Error异常抛出。 这也意味着,当发生错误的时候,以前代码中的一些错误处理的代码将无法被触发。...因为在 PHP 7 版本中,已经使用抛出异常的错误处理机制了。 (如果代码中没有捕获Error异常,那么会引发致命错误)。set_error_handle不一定接收的是异常,有可能是错误。...变更 传递参数过少时将抛出错误 过去我们传递参数过少 会产生warning。...如果对象不可数,PHP抛出警告⚠️ 。所以需要检查对象或者数组是否可数。 PHP 7.3 提供新的函数 is_countable() 来解决这个问题。

4K41
领券