我想知道是否有办法扩展别名的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');
如果有人解决了这个问题,我很想知道你是怎么做到的。
答案 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::class
(https://wiki.php.net/rfc/class_name_scalars)。
在PHP 5.3+中,您可以使用AliasExpander::expand('MyArea')
(https://github.com/milo/utils#aliasexpander)。