Assertions

From: Date: Thu, 17 Oct 2013 07:25:26 +0000
Subject: Assertions
Groups: php.internals 
Request: Send a blank email to internals+get-69597@lists.php.net to get a copy of this message
Morning All, I'd like to draw some attention to how poor assertions are in PHP. The current assertion API is not usable in my opinion; it has a considerable overhead, relies on eval(), and is generally poorly implemented. I have done some work toward implementing assert at the Zend level, giving assertions a more modern, usable feel to them. https://github.com/krakjoe/php-src/compare/assert This implementation of assert removes the old implementation and associated functions and INI settings, and replaces it with a single INI setting to control assertion compilation. Failed assertions throw an AssertionException (which extends ErrorException with a severity of E_ERROR), setting the message of the exception to the expression asserted. The syntax of assertion is the same as [all] other languages: T_ASSERT expr ';' This means that assert("some code here") will pass assertion causing no error, because strings are no longer treated as code, because eval is evil(); Setting zend.assertions=0 system configuration setting will stop ZEND_ASSRT compilation. So, we have: try { assert (PHP != JUNK); } catch(AssertionException $ex) { printf("Assertion failed: %s\n", $ex->getMessage()); printf("Something is horribly wrong ...\n"); } Better, no ?? Cheers Joe

« previous php.internals (#69597) next »