Php 名称空间和类加载有问题

Php 名称空间和类加载有问题,php,namespaces,autoloader,Php,Namespaces,Autoloader,Im构建了一个定制的CMS,设置了一个自动加载器,并且已经适应了名称空间的使用。在大多数情况下,加载都是正确的,但在某些情况下,PHP报告它找不到类,类文件已经包含在内 一旦包含一个文件(使用require),它也应该被实例化。 父控制器被实例化,然后子控制器尝试实例化它自己的一些依赖项 $this->auth = new \Modules\Auth\RT\Auth(); 这将在/modules/auth/rt/auth.php中查找一个文件,确实如此,并且类被正确实例化 Aut

Im构建了一个定制的CMS,设置了一个自动加载器,并且已经适应了名称空间的使用。在大多数情况下,加载都是正确的,但在某些情况下,PHP报告它找不到类,类文件已经包含在内

一旦包含一个文件(使用require),它也应该被实例化。 父控制器被实例化,然后子控制器尝试实例化它自己的一些依赖项

$this->auth     = new \Modules\Auth\RT\Auth();
这将在/modules/auth/rt/auth.php中查找一个文件,确实如此,并且类被正确实例化

Auth的命名空间为:

namespace Modules\Auth\RT;
auth类试图加载自己的依赖项,尤其是模型

$this->auth_model   = new Models\ModelAuth();
这里要包含的文件位于/modules/auth/rt/models/modelauth.php 它被成功地包括在内,但是PHP说我在这里找不到这个类

Fatal error: Class 'Modules\Auth\RT\ModelAuth' not found in /Users/richardtestani/Documents/ShopOpen-Master/shopopen/modules/auth/rt/auth.php on line 12
是什么原因导致即使包含该文件,该类也不会被实例化? 谢谢 Rich

试试这个:

$this->auth_model   = new Modules\Auth\RT\Models\ModelAuth();
试试这个:

$this->auth_model   = new Modules\Auth\RT\Models\ModelAuth();
$this->auth_model=new\Modules\auth\RT\Models\ModelAuth()
$this->auth_model=new Models\ModelAuth()
当您在此命名空间中时
\Modules\Auth\RT

缺少\,因此代码尝试两次包含名称空间


真的;)

返回错误:致命错误:在第12行的/Users/richardtestani/Documents/ShopOpen Master/ShopOpen/Modules/Auth/RT/Auth.php中找不到类'Modules\Auth\RT\Modules\Auth\RT\Models\ModelAuth'。似乎将当前名称空间和类的路径连接起来。虽然我找到了一个解决方案,但我还是有点困惑,为什么它可以工作,而不是我的初始代码。似乎将完整路径作为名称空间修复了这一问题,并将其实例化到相同的名称空间中。因此,在加载文件时,找不到名称空间,因此该类没有实例化。我仍然收到相同的错误。奇怪,因为该文件已正确包含。这两种情况都会导致相同的错误。我已经检查了我的自动加载器,甚至在应用程序之外对其进行了测试,并在那里加载。我不确定在这种情况下会发生什么。