在不指定名称空间的情况下按类名实例化类

时间:2019-04-01 17:30:45

标签: php

我正在使用PHP5.6,并尝试制作一个基本路由器。我正在使用一个小的uri -> array(class, method)地图,然后用call_user_func调用它,如下所示:

$uriMap = [
    '' => ['IndexController', 'hello'],
    'dpo/' => ['DpoToolsController', 'hello'],
];
$instance = $uriMap[$uri][0];
$method = $uriMap[$uri][1];
$result = call_user_func(new $instance, $method, $_REQUEST);

在我开始命名间隔之前,这确实非常有效。

use DPO\DpoToolsController;
use Portal\IndexController;

我可以使用$ctrl = new DpoToolsController()实例化一个新的DpoToolsContoller,但是上面的函数call_user_func()不再可用,因为它找不到该类。

我当然可以在URL映射中包含名称空间,但是我认为使用use的目的是我们不必这样做。

是否有解决方案,例如以编程方式确定字符串引用类的名称空间?

0 个答案:

没有答案