PHP comes with a unit function that can replace echo debugging

Source: Internet
Author: User
Keywords Network programming PHP tutorial
Tags callback function calls code debugging echo error example failed

Today found a function assert and assert_options, they can be combined to complete a simple phpunit function, but it is too simple, so not much useful, but still a good record.

The main problem is not flexible to define their own error message, can only prompt the problem files and lines.

Specific use can see <> or <>

At the same time can be combined <> in "XXVII. Error Handling and Logging Functions" section of the things to be used together.

The following is a test file I wrote, contains all the features of the test, but ASSERT_QUIET_EVAL has not quite understand, did not test out what kind of specific role

<? php
function assert_failed (file, line, expr) {
print "Assertion failed in file [line]: expr";
}
// error_reporting is set to 0, which is equivalent to calling assert_options (ASSERT_WARNING, 0);
// error_reporting (0);
// Whether to enable ASSERT_ACTIVE support
assert_options (ASSERT_ACTIVE, 1);
// Whether to stop the execution of the script when sending the first wanning
assert_options (ASSERT_BAIL, 0);
// Did not get, do not understand how to use specific, even test out
// assert_options (ASSERT_QUIET_EVAL, 0);
echo "step 1 <br />";
assert (1 == 1);
echo "step 2 <br />";
assert (2 == 1);
echo "step 3 <br />";
// Set assert callback style, you can define the style of wanning information display
assert_options (ASSERT_CALLBACK, assert_failed);
// Do not show assert () Generate warnning information. If ASSERT_CALLBACK is set, the corresponding information of ASSERT_CALLBACK function will still be displayed, but the expr parameter passed into the function will not work.
// assert_options (ASSERT_WARNING, 1);
assert (1 == 1);
assert ((1/0)> 2);
echo "step 4 <br />";
?>

The following passage is directly copied from

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 isnt, please tell me. "For example:
print "Stage 1n";
assert (1 = = 1);
print "Stage 2n";
assert (1 = = 2);
print "Stage 3n";

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, while 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 asserts.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: exprn";
}
assert_options (ASSERT_CALLBACK, assert_failed);
assert_options (ASSERT_WARNING, 0);
foo = 10;
bar = 11;
assert (foo> bar);

That example shows a callback function 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 fromased 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));

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.