首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从具有不同命名空间的类动态创建新对象

从具有不同命名空间的类动态创建新对象
EN

Stack Overflow用户
提问于 2013-11-03 09:41:02
回答 1查看 2.1K关注 0票数 2

我正试图为我的数据库创建一个小型的RESTful API,我遇到了基于用户请求动态创建控制器对象的问题,因为我的所有代码都在使用名称空间并只执行:

代码语言:javascript
复制
$api = new $controllerName($request);

不起作用。因为$controllerName将解析为"ReadController",但实际上是\controllers\lottery\ReadController,因此出现了错误。

定义类路径的整个部分是:

代码语言:javascript
复制
if ($method === 'GET') {
    $controllerName = 'ReadController';
    // @NOTE: $category is a part of $_GET parameters, e.g: /api/lottery <- lottery is a $category
    $controllerFile = CONTROLLERS.$category.'/'.$controllerName.'.php';
    if (file_exists($controllerFile)) {
        include_once($controllerFile);

        $api = new $controllerName($request);
    } else {
        throw new \Exception('Undefined controller');
    }
}

以及ReadController在core\controllers\lottery\ReadController.php中的声明

代码语言:javascript
复制
namespace controllers\lottery;

class ReadController extends \core\API {

}

有什么想法吗?如何动态创建对象?

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-03 09:43:08

代码语言:javascript
复制
$controllerName = 'controllers\lottery\ReadController';
new $controllerName($request);

从字符串实例化的类必须始终使用完全限定的类名。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19751582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档