2013/10/17 Julien Pauli <[email protected]>
> On Thu, Oct 17, 2013 at 9:25 AM, Joe Watkins <[email protected]> wrote:
>
> > 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<
> 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 ??
>
>
> I like the idea.
>
Me too. And yes, I really use assertions.
> However, there is always the debatte about if a Core feature should throw
> an Exception or generate an error.
> In our current system, they don't throw Exceptions but generate errors.
>
Because assertions (or at least the resulting error) should be disabled in
production I'd be fine with an error too.
> Also : someone could use a callback, and then make them throw exceptions if
> he wants to ; the callback on assertion fail, which IMO is a good feature,
> has dissapeared in your patch.
>
> Julien.Pauli
>
--
github.com/KingCrunch