Love the simplicity of the RFC, but I can already see people doing terrible
things with it:

  << new DateTimeImmutable() >>
<< log(get_instance('logger')) >>

And other global-state related stuff.

TBH, I'd rather just allow a constant array (with constant expressions
only), and that would be good enough :-)


Marco Pivetta


On 13 May 2016 at 15:15, Mathieu Rochette wrote:

On 05/13/2016 02:57 PM, Davey Shafik wrote:
On Fri, May 13, 2016 at 2:11 PM, Rasmus Schultz wrote:

Dear Internals,

I'm announcing a simplified RFC for annotations:


It's an alternative to the proposed Attributes RFC and the (2010)
Annotations RFC.

I'm attempting with this to describe a feature that is closer to the
language than what is proposed by the Attributes RFC, by permitting
the use of any valid PHP expression as an annotation value.

Where the Attributes RFC proposes new syntax for what is essentially
arrays, this proposal instead permits you to use actual arrays, e.g.
without inventing any new syntax. It also allows you to use values of
any other type, including objects. This makes the proposed feature
more immediately useful, with a minimal learning curve.

Compared with the old Annotations RFC (and Doctrine Annotations, etc.)
this proposal does not attempt to define or enforce any rules about
what annotations are, permitted usage, inheritance rules, etc. -
instead it adds a very simple language feature upon which the
community may choose to build (and evolve) facilities that implement
additional rules and logic.

My hope is that, if we can agree on something very small and simple,
we can defer the more opinionated discussions about rules and logic to
the community.

In my opinion, language features should be simple, and consistent with
the language - I believe the way to do that, is to avoid discussions
about how such as facility should be used, and instead focus on how it
should work. There is a lot of opinion built into the old Annotations
RFC, and into Doctrine - features that attempt to dictate how the
feature should be used. I don't believe the language should dictate
what is or isn't correct or appropriate use.
I think I like this, however a couple of simple questions:

1) Any chance for (optionally) _naming_ annotations? It would be nice to be
able to do: ->getAnnotation('table') and not have to handle unnecessary
not sure you need that, you can do this instead:
however it won't throw an error if you have more than one "Table::class
annotation" whereas I supposed you would expect so with a named annotation
2) I like the idea of Hacks memoize for example, how do you see those being
implemented? Or don't you?
if Rasmus goal is to that "we can agree on something very small and
simple" I guess it would best be left for another rfc
3) When are annotations executed? On ->getAnnotations()? Every time?
given they are context free, I suppose they would be executed on the
first call only

but what about this kind of annotation classes? :

class Counter {
private static $i = 0;
private $n;
function __construct() {
$this->n = self::$i++;
function get() { return $this->n; }

both the getAnnotations() calls order and whether or not annotations are
executed every time would make a difference
Mathieu Rochette

Search Discussions

Discussion Posts


Follow ups

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 4 of 25 | next ›
Discussion Overview
groupphp-internals @
postedMay 13, '16 at 12:11p
activeMay 17, '16 at 6:39p



site design / logo © 2019 Grokbase