当前位置: 首页 > 后端技术 > PHP

一起来学习一下PHP中断言函数的使用方法

时间:2023-03-29 19:49:22 PHP

一直以为断言相关的函数都是PHPUnit等单元测试组件提供的。看了手册才知道assert()断言函数是PHP自带的函数。也就是说,我们在代码中进行简单的测试时,不需要完整地引入整个单元测试组件。assert()断言函数assert(1==1);assert(1==2);//当assert.exception=0,Warning:assert():assert(1==2)//assert.exception=1,致命错误:UncaughtAssertionError:验证失败。很明显,第二段代码无法通过断言验证。这时,PHP会返回警告或异常错误。为什么可能有两种错误的形式?当我们将php.ini中的assert.exception设置为off或0时,即关闭该参数的能力时,程序仍然会以PHP5的形式返回警告,就像上面代码中的注释一样。同时也不能通过try...catch捕获异常。这个参数其实是控制是否抛出一个正宗的异常对象。如果将该参数保持为默认值,即设置为on或1,则直接抛出异常,程序终止。从上面的代码可以看出,断言的第一个参数是一个表达式,它需要一个返回bool类型对象的表达式。如果我们传递一个字符串或数字怎么办?//为多个测试设置assert.exception=0assert("");//Deprecated:assert():Callingassert()withastringargumentisdeprecated//Warning:assert():Assertion""failedassert("1");//Deprecated:assert():Callingassert()withastringargumentisdeprecatedassert(0);//Warning:assert():assert(0)failedassert(1);assert("1==2");//Deprecated:assert():Callingassert()withastringargumentisdeprecated//Warning:assert():Assertion"1==2"failed很明显第一个参数的表达式会执行类型强制转换,但是string类型会有一个obsolete提示,说明传递给assert()函数的string类型的表达式类型已经过时。当前测试版本为7.3。以后可能会直接报错或者异常停止运行。主要问题是,如果传递的字符串本身是表达式,会根据表达式的内容进行判断,容易造成歧义,就像上一段代码一样。当然过时的用法还是不推荐,这里只是一个理解。接下来,让我们看看assert()函数的其他参数。它的第二个参数有两种类型,要么是字符串用于定义错误信息,要么是异常类用于抛出异常。assert(1==1,"Verificationfailed");assert(1==2,"Verificationfailed");//Warning:assert():Verificationfailedfailed如果直接给出字符串,则在提示信息中的警告,显示的是我们定义的错误信息的内容。这很容易理解。//注意assert.exception设置的区别assert(1==1,newException("验证失败"));assert(1==2,newException("验证失败"));//assert.Whenexception=1,Fatalerror:UncaughtException:Verificationfailed//Whenassert.exception=0,Warning:assert():Exception:Verificationfailed当然我们也可以给一个异常类让assertion抛出异常。默认情况下,抛出此异常将中止程序的执行。即一个正常的异常抛出过程,我们可以使用try...catch来捕获异常。try{assert(1==2,newException("验证失败"));}catch(Exception$e){echo"验证失败!:",$e->getMessage(),PHP_EOL;}//验证失败!:如果验证失败,还有一个参数会影响断言的整体运行,那就是php.ini中的zend.assertions参数。包含三个值:1,生成并执行代码,一般在测试环境下使用0,生成代码但运行时传-1,不生成代码,一般在正式环境下使用这个参数,可以自己配置测试,default它在php.ini中的默认值为1,即正常执行assert()函数。assert_options()以及php.ini中对应的参数配置PHP中的断言函数也为我们提供了一个assert_options()函数,用于方便的设置和获取一些与断言能力相关的参数配置。它可以设置的断言标志是:Flags|INI设置|默认|说明ASSERT_ACTIVEassert.active1启用assert()断言ASSERT_WARNINGassert.warning1为每个失败的断言生成一个PHP警告(warning)ASSERT_BAILassert.bail0在断言失败时中止执行评估。这些参数的含义非常容易理解。你可以自己测试一下。我们来看看最后一个ASSERT_CALLBACK的作用。其实它的描述也很明确,就是如果断言失败,就会进入这个选项定义的回调函数。assert_options(ASSERT_ACTIVE,1);assert_options(ASSERT_WARNING,1);assert_options(ASSERT_BAIL,1);assert_options(ASSERT_CALLBACK,function($params){echo"====faild====",PHP_EOL;var_dump($params);echo"====faild====",PHP_EOL;});assert(1!=1);//====faild====//string(105)".../source/让我们学习如何使用PHP.php中的断言函数"//====faild====当断言失败时,我们进入回调函数,回调函数简单的打印出来,传递给回调函数参数内容。可以看出,在这个回调函数中传递了无法通过断言的文件信息。总结学习掌握断言函数的使用和配置,可以为我们以后学习PHPUnit单元测试打下基础。当然,有这个能力的东西不多,记住就好!测试代码:https://github.com/zhangyue0503/dev-blog/blob/master/php/202005/source/%E4%B8%80%E8%B5%B7%E5%AD%A6%E4%B9%A0PHP%E4%B8%AD%E6%96%AD%E8%A8%80%E5%87%BD%E6%95%B0%E7%9A%84%E4%BD%BF%E7%94%A8。PHP参考文档:https://www.php.net/manual/zh/function.assert-options.phphttps://www.php.net/manual/zh/function.assert.php===========各媒体平台均可搜索【硬核项目经理】