On Wed, Jan 9, 2013 at 3:48 PM, Benjamin Eberlei <kont...@beberlei.de>wrote:

> On Wed, Jan 9, 2013 at 1:42 PM, Derick Rethans <der...@php.net> wrote:
>
>> Please, no top posting!!!
>>
>> On Wed, 9 Jan 2013, Vladislav Veselinov wrote:
>>
>> > Taken from the Doctrine documentation:
>> >
>> > <?php
>> > class User
>> > {
>> >     //...
>> >     /**
>> >      * @ManyToMany(targetEntity="Group")
>> >      * @JoinTable(name="User_Group",
>> >      *      joinColumns={@JoinColumn(name="User_id",
>> referencedColumnName="id")},
>> >      *      inverseJoinColumns={@JoinColumn(name="Group_id",
>> referencedColumnName="id")}
>> >      * )
>> >      */
>> >     private $groups;
>> >     //...
>> > }
>> >
>> > Not that I'm a fan of it, but it provides a valid usecase. I'm sure
>> > there are more.
>>
>> Maybe valid, but sticking this into core-syntax seems mental.
>>
>
> The Doctrine Syntax is verbose, because that is necessary to make up for
> the missing compile time support in the language.
> The core could easily offer a "simpler" language or one that looks more
> like PHP code (array syntax).
>
> If you take a look at annotations by starting with PHP code, instead of
> docblocks and the syntax optimized for that use-case you can end up with
> something much simpler, see:
>
> The most simple type of annotations is attaching metadata to a class,
> method, function, property. In Clojure this is actually done like this at
> runtime setting a hashmap to any structure.
> In PHP that would be something like:
>
> function foo() {}
>
> $refl = new ReflectionFunction('foo');
> $refl->setMetadata(array('foo' => 'bar'));
> $refl->getMetadata();
>
> Doctrine Annotations do allow "retrieving" metadata for any structure,
> sspecified in docblocks. For seperation we need something the Annotations
> RFC defined, a new type of docblock that is executable code wrapped in for
> example <> brackets, if this were just PHP code, then we'd have:
>
> <return array('foo' => 'bar'))>
> function foo() {}
>
> Now the difference between this syntax, and something resembling "Docblock
> Annotations" would mean that the last statement between <> is returned from
> the block. With short syntax for arrays we get:
>
> <['foo' => 'bar']>
> function foo() {}
>
> Now this is nothing new to learn for anybody, except that <> code for any
> structure can be "executed" using $reflection->getMetadata();
>
> And the crazy people (like me) could do more structured things:
>
> use Doctrine\ORM\Mapping AS ORM;
>
> <[new ORM\Entity, new ORM\Table(name="user")]>
> class User {}
>

The last two lines are wrong, must obviously be:

<[new ORM\Entity, new ORM\Table(['name'=>"user"])]>
class User {}

Reply via email to