----- "Guilherme Blanco" <guilhermebla...@gmail.com> wrote:
> @Christian: > > Placing items on constructor may be valid at first glance, but it > would break class inheritance (constructor prototype). > So, that's why this idea was dropped. > > @Etienne: > > How would it work with nested Annotations? > > %Foo(%Bar(type=%Woo)) > > If you consider just PHP after it, the correct would be: > > %Foo(new Bar(type=new Woo())) > > It seems not consistent to me. In what I suggest, there wouldn't even be named assignments (unless supported by PHP). The only special syntax for the outer annotation is by prefixing with "%" and avoiding the "new", but that's it. Even with that inconsistency it's still far more consistent with PHP as a whole IMO. > > I think the separator is not an issue to be accepted/not accepted. > Please just don't start ANOTHER 6 months discussion just to choose a > new separator. It's not about the specific separator, I'm just pointing out that even though @ is not available, we can also use other infix operator, to have something close to what we can find in other languages. > > > On Wed, Aug 25, 2010 at 6:29 PM, Etienne Kneuss <col...@php.net> > wrote: > > > > ----- "Guilherme Blanco" <guilhermebla...@gmail.com> wrote: > > > >> Hi Etiene, > >> > >> > >> AliasedName is not implemented yet, but I added in RFC as one of > the > >> first enhancements to be done. > >> The purpose of it is to reduce the over-typing needed to > instantiate > >> namespaced classes. > >> > >> Here is the first idea: > >> > >> ReflectionAnnotation::addNamespaceAlias('Doctrine', > >> 'Doctrine\ORM\Mapping'); > >> > >> [Doctrine:Entity] > >> > >> would be the same to > >> > >> [\Doctrine\ORM\Mapping\Entity] > >> > >> > >> The syntax can be changed, but there're some concerns to be made. > >> > > > > The problem that I see with this proposal is that it introduce a lot > of > > new syntax and rules, that not only are inconsistent with the > existing > > ones, but quite confusing. > > > > > > What I'm wondering is why can't we simply have the following simple > syntax: > > > > %MyAnnotation > > > > or > > > > %MyAnnotation(expr, ...) > > > > My Annotation would be the classref, instanciated as annotation. > > expr would be _any_ PHP expression. We could decide when to > actually > > execute the code, but I guess at the time of the class definition > would > > be ok. > > > > That way, we only introduce this "%" syntax, the rest is pure old > PHP. > > Note that "%" is using as an infix operator here, so it should not > > conflict with the existing grammar. > > > > To me, it looks _way_ easier to use, it might be a tad bit harder > to > > implement though. > > > >> Q1 - Why not use array() instead of {} ? > >> > >> The parser would consider array() as an Annotation and would > attempt > >> to instantiate it. Also, it's not so verbose do have: > >> > >> [Documentation(array("author" => "Guilherme Blanco", "age" => > 26))] > >> > >> Where it could be simplified to: > >> > >> [Documentation({"author" = "Guilherme Blanco", "age" = 26})] > >> > >> > >> Q2- Why some keys are defined as string and others as identifiers? > >> > >> The reason of the existance to identifiers are for properties of > >> Annotation class, whereas key strings are used for array > denotation. > >> > >> > >> Q3- Why not use plain arrays as Annotations? > >> > >> This would lead to a simplified EBNF, yes... but also would lead > to > >> the lack of validation of keys, and would make Annotations accept > >> anything that may/may not have a meaning. > >> One of the main problems that PHP has is the lack of > standardization; > >> this is one the things we tried to achieve on this implementation. > >> Also, more and more PHP OO is not an optional thing. I know many > >> projects like Drupal/Wordpress are built around functional > paradigm; > >> but at the same time, I see no real use case to use Annotations on > >> functions, although we implemented this support. So... I still > don't > >> see reasonable arguments that would justify a change to arrays. > >> > >> > >> Q4- What are the possible enhancements to be made around it? > >> > >> I already added the AliasedName, mainly because I'm feeling > necessity > >> for it already. > >> Another one is to send the Reflector instance in Annotation > >> constructor, allowing then a possible userland validation. One > good > >> example: > >> > >> PHPUnit's ExpectedException is only valid for methods. So, a > possible > >> implementation: > >> > >> namespace PHPUnit; > >> > >> class ExpectedException extends \ReflectionAnnotation { > >> public function __construct(\Reflector $instance, array > $values) > >> { > >> if ( ! ($instance intanceof \ReflectionMethod) { > >> throw new Exception('ExpectedException is only allowed > in > >> method's scope.'); > >> } > >> parent::__construct($instance, $values); > >> } > >> } > >> > >> > >> Q5- Annotations separator? > >> > >> Since we cannot use @, we picked from known possibilities of > >> namespace > >> separator and also programming languages that have similar > support. > >> The easiest I found is C#, which is the one we got it. > >> > >> > >> > >> > >> Any other questions? > >> > >> On Wed, Aug 25, 2010 at 1:04 PM, Pierrick Charron > >> <pierr...@webstart.fr> wrote: > >> > Hi Etienne, > >> > > >> > 2010/8/25 Etienne Kneuss <col...@php.net>: > >> >> On Aug 25 8:56:53, Pierrick Charron wrote: > >> >>> Hello PHP Internals! > >> >>> > >> >>> Recently a RFC was included on the PHP Wiki[1]. > >> >>> I know there've been a lot of buzz related to PHP 5.4, but this > is > >> not > >> >>> the subject of this email. > >> >>> > >> >>> I'm here to propose a new feature in PHP: Annotations. > >> >>> A patch is already available with 54 tests for the moment[2]. > >> >>> > >> >>> I worked together with Guilherme Blanco to make this support > >> happen in > >> >>> a fresh PHP SVN trunk checkout. > >> >>> Please review, comment and provide feedback! I think it's a > very > >> >>> useful support and may benefit users a lot. > >> >>> > >> >>> [1] http://wiki.php.net/rfc/annotations > >> >>> [2] http://www.adoy.net/php/Annotations.diff > >> >> > >> >> Quite interresting RFC! However, I've a few concerns/questions: > >> >> > >> >> 1) The new limitted syntax (esp. the field assignation). IMO > this > >> should > >> >> be extended to support more/all expressions. > >> > > >> > What kind of syntax would you like to add ? Right now you can > add > >> > common static variables, array and Annotations. > >> > > >> >> > >> >> 2) How does it create the annotation? will it call __construct? > If > >> so, > >> >> Foo("asd") should defeinitely map to a constructor call, and > the > >> field > >> >> assignation should be discarded unless we have named > parameters. > >> > > >> > Since php does not support named parameter the __construct is > >> called > >> > with an array as parameter > >> > [Foo("bar", baz="baz)] > >> > will call __construct(array("value" => "bar", "baz" => "baz)); > >> > > >> >> > >> >> 3) What is the purpose of an aliased name? > >> > > >> > Aliased name ? > >> > > >> >> > >> >> Best, > >> >> > >> >>> > >> >>> Regards, > >> >>> Pierrick > >> >>> > >> >>> (Sorry if you receive this message twice but it looks like I > have > >> >>> problems with the ML) > >> >>> > >> >>> -- > >> >>> PHP Internals - PHP Runtime Development Mailing List > >> >>> To unsubscribe, visit: http://www.php.net/unsub.php > >> >>> > >> >> > >> >> -- > >> >> Etienne Kneuss > >> >> > >> > > >> > -- > >> > PHP Internals - PHP Runtime Development Mailing List > >> > To unsubscribe, visit: http://www.php.net/unsub.php > >> > > >> > > >> > >> > >> > >> -- > >> Guilherme Blanco > >> Mobile: +55 (16) 9215-8480 > >> MSN: guilhermebla...@hotmail.com > >> São Paulo - SP/Brazil > >> > >> -- > >> PHP Internals - PHP Runtime Development Mailing List > >> To unsubscribe, visit: http://www.php.net/unsub.php > > > > -- > > PHP Internals - PHP Runtime Development Mailing List > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > > > > -- > Guilherme Blanco > Mobile: +55 (16) 9215-8480 > MSN: guilhermebla...@hotmail.com > São Paulo - SP/Brazil -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php