RE: [PHP-DEV] Re: Annotations in PHP7
| From: | François Laupretre | Date: | Tue, 17 Feb 2015 13:50:40 +0000 |
| Subject: | RE: [PHP-DEV] Re: Annotations in PHP7 | ||
| References: | 1 2 3 4 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-82959@lists.php.net to get a copy of this message | ||
HI Dmitry,
Question : in which scope do you evaluate the PHP expression ?
Example :
<DbC.requires($a > 0);>
<DbC.ensures(__RETURN__ > 0);>
function foo($a)
{
...
How can you know from this that the first expression must be evaluated at function entry, that the
second one must be interpreted when function exits, let alone the question of __RETURN__ replacement
and external switch to authorize/disable DbC evaluations.
Several people rightly stated that expression would be computed at compile time. That's a way
to solve the scope question as it practically means that expressions are evaluated in the global
scope, but DbC must evaluate its expressions at runtime. Does it mean we should write
'<DbC.requires('$a > 0')> ? Not very intuitive but that's probably the
only solution.
Something else : I am not sure I understand, but do you intend evaluating annotation expressions
everytime you parse the file. Or would you provide a global switch ?
> Any one can use doc-block now and later, but php core won't parse doc-blocks. It's a
> task for external tools.
I understand. Actually, DbC is not the perfect use case for annotations. It would be fine to find a
good use case because neither of DbC, AOP, Doctrine, or phpdoc fit so well.
There comes my last question : is it so interesting and mandatory to implement annotations in the
core, instead of an extension which would parse doc blocks when needed, and would return bare
strings through a reflection-like API ? I know most want to put annotations in the core, but
what's the real benefit, if we don't consider performance ? Do we have use cases comparing
both approaches ?
The fact that we voluntarily make it incompatible with phpdoc and doctrine 'annotations'
saddens me a bit too because people used to the current 'annotation' meaning will have to
integrate that a new PHP native 'annotation' feature, totally different from what
they've been using for years. And doctrine is not an edge-case. If there are good reasons, why
not, but I don't see them yet.
Regards
François