1

我正在尝试创建一个对象的实例,其路径如下 (C:\wamp\www...)

在一个新项目中,我有这个方法,我尝试用它来实例化另一个项目的对象。

public function getControllerObject($class)
{
    $object =  null;
    $class = realpath($class);  
    $class = str_replace('.php','',$class);

    $object = new $class();

}

变量 $class 有例如这个值:

C:\wamp\www\myproject\projectBundle\Controller\DefaultController

但我得到 FatalErrorException:Error: Class. Class not found

我已经尝试放置 2 个反斜杠,但它不起作用。

任何想法?

4

2 回答 2

1

使用基本名称,而不是真实路径:

$class = basename($class); 

对于您的示例,它应该产生DefaultController.

于 2013-10-22T13:37:45.287 回答
0

首先,您尝试做的事情听起来像是一个可怕的想法!如果您想从另一个项目访问该类,您应该将它(项目或文件)添加到您的依赖项中。

你的问题是,你基本上做的是:

$object = new C:\wamp\www\myproject\projectBundle\Controller\DefaultController();

这显然不是你想要的。当您没有输入有效路径时(我假设发生了这种情况),realpath 将返回 false 并且它也不起作用。

您必须以某种方式确定路径的哪一部分是命名空间的一部分,哪一部分不是。您还可以通过添加项目根来做到这一点,这意味着要从路径或名称空间本身中删除哪个部分,即要从路径中保留的部分(假设您遵循 PSR-0 的建议),这应该会给您留下什么你想要(在str_replace()apreg_replace()或类似的东西之后)。

无论如何,解决问题的最简洁的方法(除了添加依赖项)是使用Symfony 类加载器而不是将路径硬编码到应用程序中。

于 2013-10-22T14:53:01.607 回答