Dne 31.10.2014 12:00, Chris Wright napsal(a):
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"
Alias support is not needed here, HttpClient::CLASS can be used for
expansion.
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.
It starts to make sense, when you use kind of "code analysis". For
following techniques, getDefinedAliases() has an added value:
<?php
use Library\Http\Clients\CurlClient as HttpClient;
# Dependency Injection (public property injection)
class Downloader
{
/**
* @var HttpClient
* @inject
*/
public $httpClient;
}
# Factory
class HttpClientFactory
{
/** @return HttpClient */
public function create()
{
}
}
This code is analysed in other file. For example in some dependency
injection container. In this container, you must care what string
'HttpClient' in annotations really means. What it means in context of
classes Downloader and HttpClientFactory.
I agree with Levi, that using FQN in annotations works. And I wrote
reasons why it is wrong. Moreover, IDEs works with aliases in
annotations well. The only missing fragment is, that you cannot access
aliases definitions in run-time. That's the reason for the RFC.
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.
An alias can be defined (almost) anywhere. Following is valid PHP code:
<?php
use Library\One;
class C {}
use Library\Two;
class D {}
Alias 'One' exists for class C and D. But alias 'Two' exists only for
class D. If you want to resolve an alias to FQN, you must choose a
context. But where to get the context in run-time? Class or function
reflection seems right.
Thank you, Milo
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php