将PHP名称空间别名扩展为完整名称空间字符串

时间:2011-10-25 22:04:34

标签: php namespaces

我想知道是否有办法扩展别名的PHP命名空间令牌以获取完整的命名空间标识符。这样做的目的是我们的对象创建工厂需要一个具有完整命名空间的字符串,以便它可以自动加载它。这是一个简单的例子:

<?php

use my\namespace\area as MyArea;

$goodObject = MyApp::factory('my\namespace\area\ClassName');
$badObject = MyApp::factory('MyArea\ClassName');

我正在寻找一些通用的解决方案,以便能够在任何情况下扩展NS别名,具体等同于:

$desiredObject = MyApp::factory(resolve_namespace_alias('MyArea') . '\ClassName');

如果有人解决了这个问题,我很想知道你是怎么做到的。

2 个答案:

答案 0 :(得分:1)

我不知道解析字符串,但来自对象实例的类:

use my\namespace\area as MyArea;

$b = new MyArea;
$c = get_class($b);
echo $c; # my\namespace\area

这个问题有些相关:Can't get constant from dynamic class using namespaces

答案 1 :(得分:1)

自PHP 5.5起,您可以使用MyArea::classhttps://wiki.php.net/rfc/class_name_scalars)。

在PHP 5.3+中,您可以使用AliasExpander::expand('MyArea')https://github.com/milo/utils#aliasexpander)。