----- "Benjamin Eberlei" <kont...@beberlei.de> wrote:

> That is true, arrays dont allow for aliasing of any kind if
> annotations
> have different meaning in different frameworks.
> With arrays you can at least use the one annotation for different
> purposes
> as long as these purposes don't define the same keys.
> 
> With Objects however you always need aliasing. PHPUnit will want to
> have a
> PHPUnit_Annotation_ExpectedException class, not an ExceptionException
> class
> only. However nobody would want to write:
> 
> [PHPUnit_Annotation_ExpectedException]
> 
> So when including PHPUnit, the annotation classes would probably
> register
> themselves as alias. Using a prefix for the aliasing begs the question
> of
> how to find the real class, if you have 2 or more aliases defined.
> Iterate
> over them and check for existance?
> 
> [ExpectedException] with many alises could be for example
> PHPUnit_Annotation_ExpectedException, or
> Doctrine\ORM\Mapping\ExceptedException or
> Symfony\Framework\Form\Annotation\ExpectedException.
> 
> This sounds pretty expensive to me. So its probably better to have a
> map
> of alias => classname. But this is adding quite some management
> overhead,
> i.e. you need methods:
> 
> ReflectionAnnotation::registerAlias($alias, $className);
> ReflectionAnnotation::hasAlias($alias);
> ReflectionAnnotation::getAliases();
> ReflectionAnnotation::getAliasClass($alias);
> ReflectionAnnotation::getAliasFor($className);
> 
> Now say you have a library X with an Annotation aliased Bar (and you
> also
> use Framework Y with Annotation aliaased Bar).
> 
> [Bar]
> class Foo
> {
> 
> }

I don't understand why aliasing of class names suddenly becomes an issue, we 
now have namespaces which allow aliases.

use NS\To\MyAnnotation as MyAnnot;

[MyAnnot]
class Foo {

}

there is no need to have this aliasing mechanism at runtime as it will only add 
more inconsistency to the plate.

Best,

> 
> You call inside your library:
> 
>    $cls = new ReflectionClass($className);
>    $annotations = $cls->getAnnotations();
> 
> What will happen if:
> 
> 1. The annotation classes are not loaded yet.
> 2. Only the annotation classes of your library are loaded.
> 3. Both annotation classes are loaded.
> 
> On Thu, 26 Aug 2010 13:12:13 +0200, Christian Kaps
> <christian.k...@mohiva.com> wrote:
> > On Thu, 26 Aug 2010 11:17:33 +0200, Benjamin Eberlei
> <kont...@beberlei.de>
> > wrote:
> >> Hey,
> >> 
> >> 3.
> >> Ok that point may be relevant, but there is also a semantically
> nice
> and
> >> simple solution:
> >> 
> >> array('JoinTable' => array(
> >>     'name' => 'users_phonenumbers',
> >>     'joinColumns' => array(
> >>         0 => array('JoinColumn' => array('name' => 'user_id',
> >> 'referencedColumnName => 'id')),
> >>         1 => array('JoinColumn' => array('name' => 'user_id',
> >> 'referencedColumnName => 'id')),
> >>     )
> >> ));
> >> 
> > 
> > [JoinTable(
> >      name="users_phonenumbers",
> >      joinColumns={
> >          {JoinColumn={name="user_id", referencedColumnName="id"}},
> >          {JoinColumn={name="user_id", referencedColumnName="id"}}
> >      }
> > )]
> > 
> > I think this gives you the same array structure as in your example
> but
> it
> > uses no nested annotations.
> > 
> >> 
> >> 5. You already mentioned further extensions with aliasing class
> names
> to
> >> "shorten"
> >> the annotations specification. However i see several problems with
> that:
> >> 
> >> a.) It adds more code
> >> b.) Classes/Methods/Functions/Properties that have annotations of
> > multiple
> >> annotation libraries
> >> will cause pain with loading or autoloading of the necessary
> annotation
> >> classes.
> >> c.) What happens if an annotation has no corresponding class?
> >>
> > 
> > You write that the developers should implement her complex class
> based
> > solution in userland. How would you handle aliasing for classes
> there?
> > Anywhere I must define the alias or the namespace of the annotation
> class,
> > otherwise I must register all annotations(annotation name => fully
> > qualified class name) used in my application before using them.
> Using
> > annotations from different frameworks with the same name makes this
> a
> pain.
> > 
> > Greetings,
> > Christian
> 
> -- 
> 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

Reply via email to