On 31 October 2014 10:27, Miloslav Hůla <[email protected]> wrote:
> Dne 30.10.2014 14:50, Levi Morrison napsal(a):
>
>> I also don't think this feature is needed. In comments, simply use
>> fully qualified names.
>>
>
> FQN can be used in docblocks, that's true. But if you write some library
> which uses annotations and you want to offer a kind of comfort to your
> users, your hands are tied. You force them to use FQN.
>
> Personaly, I don't like any code/information duplication. Using FQN when
> the alias is already defined is wrong.
>
> And generally, there is no way how to get defined aliases in current PHP.
>
> Additionally, I really don't see how these are related to each other:
>>
>> use Library\Http;
>>
>> class C {}
>>
>> $rc = new ReflectionClass('c');
>>
>> var_dump($rc->getDefinedAliases());
>> /*
>> array(1) {
>> ["http"] => string(12) "Library\Http"
>> }
>> */
>>
>> How is ReflectionClass C related to `Library\HTTP` at all?
>>
>
> This example from RFC shows scope of defined aliases only.
>
> On the beginning, I was thinking where to place the "access point" to
> aliases definition. When I realized, that alias can be defined anywhere
> except a class or function body, ReflectionClass and ReflectionFunction
> looks like right place.
>
> The relation is more obvious in following example:
>
> use Library\Http;
>
> class C
> {
> /** @var Http\Clients\CurlClient */
> public $client;
> }
>
>
> -- Milo
>
I agree with Levi, this doesn't make a lot of sense. The only thing that
would make sense in terms of supporting aliases for me would be this:
<?php
use Library\Http\Clients\CurlClient as HttpClient;
$rc = new \ReflectionClass('HttpClient');
var_dump($rc->getName()); // string(31) "Library\Http\Clients\CurlClient"
I cannot see the value in being able to inspect the compile time constructs
at run time, but I can see the value in being able to *use* them in strings
at run time.
However, even support for this doesn't make a lot of sense without also
supporting them everywhere else that strings can be used in place of a
class name literal, for example both of these cases would need to work as
well:
$className = "HttpClient";
$obj = new $className;
var_dump($obj instanceof $className);
There may be others as well, these are just two that immediately sprang to
mind.
The getDefinedAliases() code depicted above doesn't really belong on a
ReflectionClass, or any of the other classes that currently exist, as the
aliases aren't associated with the class/function itself but the
environment in which it was defined.
Thanks, Chris