从上述代码可以看出,断言的第一个参数是一个表达式,而且是须要一个返回 bool 类型工具的表达式。如果我们通报的是一个字符串或者一个数字呢?
//设置assert.exception=0进行多条测试assert("");//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
很明显第一个参数的表达式会进行类型逼迫转换,但是字符串类型会多出一个过期提醒,表明给 assert() 函数通报字符串类型的表达式类型已经由时了。当前的测试版本是 7.3 ,在将来可能就会直接报中止运行的缺点或非常了。紧张问题在于,如果通报的字符串本身也是一个表达式的话,会以这个表达式的内容为根本进行判断,这样很随意马虎产生歧义,就像末了一段代码一样。当然,已经由时的利用办法还是不推举的,这里仅是做一个理解即可。
接下来我们看一下 assert() 函数的其他参数,它的第二个参数是两种类型,要么给一个字符串用来定义缺点的信息,要么给一个 非常类 用于抛出非常。
assert(1==1,"验证不通过");assert(1==2,"验证不通过");//Warning:assert():验证不通过failed
如果直接给的一个字符串,那么在警告的提示信息中,显示的便是我们定义的这个缺点信息的内容。这个非常好理解。
//把稳assert.exception设置不同的差异assert(1==1,newException("验证不通过"));assert(1==2,newException("验证不通过"));//assert.exception=1时,Fatalerror:UncaughtException:验证不通过//assert.exception=0时,Warning:assert():Exception:验证不通过
当然,我们也可以给一个 非常类 让断言抛出一个非常。在默认情形下,这个非常的抛出将中止程序的运行。也便是一个正常的非常抛出流程,我们可以利用 try...catch 进行非常的捕获。
try{assert(1==2,newException("验证不通过"));}catch(Exception$e){echo"验证失落败!
:",$e->getMessage(),PHP_EOL;}//验证失落败!
:验证不通过
其余还有一个参数会对断言的整体运行产生影响,那便是 php.ini 中的 zend.assertions 参数。它包含三个值:
1,天生并实行代码,一样平常在测试环境利用0,天生代码但是在运行时会途经-1,不天生代码,一样平常在正式环境利用这个参数大家可以自行配置测试,默认的 php.ini 中它的默认值是 1 ,也便是正常的实行 assert() 函数。
assert_options() 及相对应的 php.ini 中的参数配置PHP 中的断言功能还为我们供应了一个 assert_options() 函数,用于方便地设置和获取一些和断言能力有关的参数配置。它能够设置的断言标志包括:
标志 INI设置 默认值 描述 ASSERT_ACTIVE assert.active 1 启用 assert() 断言 ASSERT_WARNING assert.warning 1 为每个失落败的断言产生一个 PHP 警告(warning) ASSERT_BAIL assert.bail 0 在断言失落败时中止实行 ASSERT_QUIET_EVAL assert.quiet_eval 0 在断言表达式求值时禁用 error_reporting ASSERT_CALLBACK assert.callback (NULL) 断言失落败时调用回调函数
这些参数的含义都非常好理解,大家可以自己测试一下。我们就来看一下末了一个 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.php
https://www.php.net/manual/zh/function.assert.php