Hi,
Earlier I proposed this construct which fell on deaf ears, maybe since it means
a new keyword "nameof":
namespace Foo\Bar;
class Baz {}
$name = nameof Baz; // 'Foo\Bar\Baz'
The same expansion to FQN happens for imports/aliases with "use XXX".
I want to suggest an alternative approach which could work just the same
internally, but without a new keyword:
namespace Foo\Bar;
class Baz {}
$name = Baz::__NAME__; // 'Foo\Bar\Baz'
[IMPORTANT] Baz::__NAME__ should be replaced at parse time (like the magic
constants), so that class Baz is not autoloaded (we don't need it autoloaded
just for the name).
Why is this good:
1) Would cover our basic needs for this feature when passing class names around
for factories, callbacks, strategies, handlers and so on.
2) Doesn't introduce a new keyword, and apparently class constant __NAME__ is
very rarely used by anyone, if at all (Google Code Search shows 0 hits on PHP
code).
3) It's intuitive as it follows the conventions established by the other magic
constants, and serves a very similar purpose.
Regards,
Stan Vassilev