分享
 
 
 

php自带的简易的unit函数,可以代替echo调试,但是意义好象不太大

王朝php·作者佚名  2007-04-19
窄屏简体版  字體: |||超大  

今天发现个函数 assert 和 assert_options, 他们组合可以完成一个简单的phpunit的功能, 但是实在是太简单, 所以用处不太大, 但是还是记录一下好了.

主要问题是不能灵活的自己定义错误的提示信息,只能提示出问题的文件和行数.

具体的使用方法可以看 <<php手册>> 或者 <<php in a nutshell>>

同时可以结合 <<php手册>>中 "XXVII. Error Handling and Logging Functions" 章节里的东西,共同使用.

下面是我写的一个测试文件, 包含了所有的功能的测试,不过ASSERT_QUIET_EVAL一直不太明白,没测试出来具体有什么样作用

<?php

function assert_failed($file, $line, $expr) {

print "Assertion failed in $file [ $line ] : $expr <br/>";

}

//error_reporting设置为0, 相当于调用assert_options(ASSERT_WARNING, 0);

//error_reporting(0);

//是否启用对ASSERT_ACTIVE的支持

assert_options(ASSERT_ACTIVE, 1);

//是否在发送第一次wanning的时候,停止脚本的执行

assert_options(ASSERT_BAIL, 0);

//没搞定,还不明白具体怎么用,偶测试不出来

//assert_options(ASSERT_QUIET_EVAL, 0);

echo "step 1 <br />";

assert(1==1);

echo "step 2 <br />";

assert(2==1);

echo "step 3 <br />";

//设定assert的callback样式,可以自己定义wanning信息显示时的样式

assert_options(ASSERT_CALLBACK, 'assert_failed');

//不显示assert()自己产生warnning信息,如果设置了ASSERT_CALLBACK,仍然还会显示ASSERT_CALLBACK函数对应的信息,但是函数中传入的$expr参数不起作用.

//assert_options(ASSERT_WARNING, 1);

assert(1==1);

assert((1/0)>2);

echo "step 4 <br />";

?>

====================================

下面的一段话是直接从 中copy出来的

The assert( ) function is a clever one that works along the same lines as our print statements, but it only works if a certain condition is not matched. Essentially, assert( ) is used to say "This statement must be trueif it isn't, please tell me." For example:

print "Stage 1\n";

assert(1 = = 1);

print "Stage 2\n";

assert(1 = = 2);

print "Stage 3\n";

Here we have two assert( )s, with the first call asserting that one must be equal to one, and the second call asserting that one must be equal to two. As it is impossible to redefine constants like 1 and 2, the first assert( ) will always evaluate to true, and the second will always evaluate to false. Here is the output from the script:

Stage 1

Stage 2

Warning: assert( ) [http://www.php.net/function.assert]: Assertion failed

in /home/paul/sandbox/php/assert.php on line 5

Stage 3

The first assert( ) is not seen in the output at all because it evaluated to TRue, whereas the second assert( ) evaluated to false, so we get a warning about an assertion failure. However, script execution carries on so that we see "Stage 3" after the assertion failure warning. As long as assertions evaluate to true, they have no effect on the running of the script, which means you can insert them for debugging purposes and not have to worry about taking them out once you are finished debugging.

If you are worried about your assertions slowing execution down, which, although the speed hit will be minimal, is still a valid concern, you can disable execution of assert( ) by using the assert_options( ) function or by setting assert.active to Off in your php.ini file. If you want to use assert_options( ), it takes two parameters: the option to set and the value you wish to set it to.

Table 22-1 shows the list of options you can use for the first parameter of assert_options( ):

Table 22-1. First parameter of assert_options( )

Parameter Default Description

ASSERT_ACTIVE On Enables evaluation of assert( ) calls

ASSERT_WARNING On Makes PHP output a warning for each failed assertion

ASSERT_BAIL Off Forces PHP to end script execution on a failed assertion

ASSERT_QUIET_EVAL Off Ignores errors in assert( ) calls

ASSERT_CALLBACK Off Names user function to call on a failed assertion

To disable assert( ) calls, use this line of code:

assert_options(ASSERT_ACTIVE, 0);

And to make PHP end script execution rather than just issue a warning, we can use this line of code:

assert_options(ASSERT_BAIL, 1);

Note that all of these options can be set in your php.ini file so that they are always in effect. The options to change there are assert.active, assert.warning, assert.bail, assert.quiet_eval, and assert_callback.

ASSERT_CALLBACK is a useful option, as it allows you to write an error handler for when your code fails an assertion. It takes the string name of a function to execute when assertions fail, and the function you define must take three parameters: one to hold the file where the assertion occurred, one to hold the line, and one to hold the expression. Using all three together in your callback function allows you to generate meaningful error messages that you can debug. For example:

function assert_failed($file, $line, $expr) {

print "Assertion failed in $file on line $line: $expr\n";

}

assert_options(ASSERT_CALLBACK, 'assert_failed');

assert_options(ASSERT_WARNING, 0);

$foo = 10;

$bar = 11;

assert($foo > $bar);

That example shows a callback function defined that takes $file, $line, and $expr for the three variables passed in, and outputs them whenever an assertion fails. To make that result actually happen, assert_options( ) is called to let PHP know that assert_failed( ) is the correct function to use as a callbacknote that there are no brackets after the string being passed into assert_options( ).

ASSERT_WARNING is also disabled, which stops PHP from outputting a warning as well as running the callback function. Finally, two variables are set, and are used as part of a call to assert( )as you can see, $foo is quite clearly not greater than $bar, which means the assertion will fail and call our callback. So, the output from the script is: Assertion failed in /home/paul/tmp/blerg.php on line 9: $foo > $bar.

You can assert( ) any statement you like, as long as it will return either TRue or false. This makes the assert( ) function incredibly powerfuleven more so when you think that you can just turn off assertion execution to make the code run at full speed.

Here are some more examples of assert( )able things:

assert($savings >= $salary / 10);

assert($myarray = = array("apone", "burke", "hicks"));

assert(preg_match("/wild sheep chase/", $book));

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有