We should probably be referring to this type of syntax as attributes
rather than annotations since annotations are currently defined in
docblock comments and are recognized by certain software and utilities.
Whereas annotations have no effect on compilation or at runtime,
attributes do have the possibility of affecting compilation or runtime.
I like the idea of having a schema parameter like metadata: as that
would allow php to reserve php: for example. Almost like a namespace,
in fact it could actually be a namespace, such as:
class a {
[php:Param($s) = StringLength(4, ErrorMessage='Parameter $s length
cannnot exceed 4.', ErrorLevel=E_USER_ERROR)]
public function foo($s) { ... ]
}
I also think that providing no schema should be allowed as well, such as:
[: ... ]
We could, again, model this after the C# model whereby user-land
attributes may be defined, PHP could also provide it's own standard ones.
The only reason I mention C# here is that it's been in wide use for some
time now.
On 1/9/2013 6:03 AM, Yahav Gindi Bar wrote:
On Wed, Jan 9, 2013 at 1:57 PM, Christian Kaps <christian.k...@mohiva.com>wrote:
Hi,
I agree here, I think the above, if possible would be best. In my
mind annotations should proabably be limited in scope to class
declarations and thus only before a class keyword, before a property
or method declaration.
In none of those scopes would [ ] be a parsing issue I believe...
The one case would be at the beginning of a class, but if simply
added something such as:
[:SomeAttribute(xyz,abc),**SomeAttribute2]
It could never be confused with short array syntax and is still brief.
I think when implementing real annotations, then it should be possible to
declare arrays in it. So I think the square brackets don't work.
[Foo([1,2,3])]
Cheers,
Christian
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
But the colon prefix won't cover this case?
You can, as I've mentioned in my post at the doc-block parser discussion,
use a keyword inside the brackets to symbolize annotation, for example
[metadata: Key]
[metadata: MaxLength(10)]
[metadata: Relations(["foo", "bar", "baz"])]
public $id;
--
-Clint
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php