----- "Etienne Kneuss" <col...@php.net> wrote: > ----- "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.
s,infix,prefix, > > > > > > > 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