Re: Assertions

From: Date: Thu, 17 Oct 2013 12:49:59 +0000
Subject: Re: Assertions
References: 1  Groups: php.internals 
Request: Send a blank email to [email protected] to get a copy of this message
On Thu, 2013-10-17 at 08:25 +0100, Joe Watkins 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 don't have a strong opinion on this, but mind that by being based on
eval the assert expression can use features from a different version of
PHP. Something like

   if (PHP_VERSION_ID >= 50300) {
       assert('foo\\bar::baz == 42');
   }

the new form 

   if (PHP_VERSION_ID >= 50300) {
       assert foo\\bar::baz == 42;
   }

would give a parse error on older versions.

(Yes, I'm using 5.3 and <5.3 as example where the new form would fail
anyways, feel free to use PHP_VERSION_ID >= 51200 and PHP 5.26.0
features)
> 
>         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();
> 
I think this is bad for migration of code. For one it is impossible to
have a code base with asserts working in both versions. For two it
silently leads to completely different behavior. Changing this needs
some clever strategy allowing migration.

johannes




Thread (36 messages)

« previous php.internals (#69613) next »