带有路径的PHP实例对象

带有路径的PHP实例对象,php,object,symfony,instance,Php,Object,Symfony,Instance,我正在尝试创建一个对象实例,其路径如下(C:\wamp\www…) 在一个新项目中,我有这个方法,我尝试用它来实例另一个项目的一个对象 public function getControllerObject($class) { $object = null; $class = realpath($class); $class = str_replace('.php','',$class); $object = new $class(); } 例如,变量

我正在尝试创建一个对象实例,其路径如下(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:
错误:类。未找到类

我已经试着放了2个反斜杠,但没有用


有什么想法吗?

使用basename,而不是realpath:

$class = basename($class); 

例如,它应该生成
DefaultController

使用basename,而不是realpath:

$class = basename($class); 

例如,它应该生成
DefaultController

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

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

$object = new C:\wamp\www\myproject\projectBundle\Controller\DefaultController();
这显然不是你想要的。当您没有输入一个有效的路径时(我假设是这样),realpath将返回false,并且它也不会工作

您必须以某种方式确定路径的哪一部分是命名空间的一部分,而哪一部分不是命名空间的一部分。您还可以通过添加项目根来实现这一点,这意味着要从路径或名称空间本身中删除哪个部分,即要从路径中保留的部分(假设您遵循PSR-0的建议),这将为您留下您想要的内容(在
str_replace()
a
preg_replace()
或类似内容之后)


无论如何,解决问题的最干净的方法(除了添加依赖项外)是在应用程序中使用路径而不是硬编码路径。

首先,你试图做的事情听起来是个可怕的主意!如果要从其他项目访问该类,则应将其(项目或文件)添加到依赖项中

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

$object = new C:\wamp\www\myproject\projectBundle\Controller\DefaultController();
这显然不是你想要的。当您没有输入一个有效的路径时(我假设是这样),realpath将返回false,并且它也不会工作

您必须以某种方式确定路径的哪一部分是命名空间的一部分,而哪一部分不是命名空间的一部分。您还可以通过添加项目根来实现这一点,这意味着要从路径或名称空间本身中删除哪个部分,即要从路径中保留的部分(假设您遵循PSR-0的建议),这将为您留下您想要的内容(在
str_replace()
a
preg_replace()
或类似内容之后)


无论如何,解决问题的最干净的方法(除了添加依赖项外)是在应用程序中使用路径而不是硬编码路径。

好的,但是类不在同一名称空间上。那么名称空间是什么,项目名称是什么?您可以使用
basename
dirname
的组合来构建动态命名空间和类字符串。该类的命名空间为myproject\projectBundle\Controller。但是我的代码,例如,这个对象在一个单独的项目上,好的,但是这个类不在同一个命名空间上,那么你的命名空间是什么,项目名称?您可以使用
basename
dirname
的组合来构建动态命名空间和类字符串。该类的命名空间为myproject\projectBundle\Controller。但是我的代码,比如说,这个对象在一个单独的项目上。你是想创建一个自动加载程序还是别的什么,因为听起来就是这样。是的,我想得到一个bundle symfony2的所有控制器类。也许还有其他解决方案可以做到这一点。Symfony2自带自动加载器。不需要创建一个新的。用
use
语句对它们进行注释,然后像
$controller=new IndexController()那样创建它们出现错误,因为您试图从路径
C:\wamp\[…]\Controller\DefaultController
创建对象。PHP文件必须包含或由AutoLoad调用,如果您想访问它。考虑添加<代码>要求一次(RealPATH($class));<代码>语句添加到代码中,然后添加
$object=new ClassName()。你不能创建一个文件的实例,但是,你可以创建一个类定义的实例。你是想创建一个自动加载程序还是别的什么,因为听起来就是这样。是的,我想得到一个bundle symfony2的所有控制器类。也许还有其他解决方案可以做到这一点。Symfony2自带自动加载器。不需要创建一个新的。用
use
语句对它们进行注释,然后像
$controller=new IndexController()那样创建它们出现错误,因为您试图从路径
C:\wamp\[…]\Controller\DefaultController
创建对象。PHP文件必须包含或由AutoLoad调用,如果您想访问它。考虑添加<代码>要求一次(RealPATH($class));<代码>语句添加到代码中,然后添加
$object=new ClassName()。不能创建文件的实例,但是可以创建类定义的实例