所以我有一个非常简单的文件集:'找不到类' 包括
main.php
include_once 'User.php';
echo 'im here'; //never reached!
$user = new My\Test\User();
...
user.php的
namespace My\Test;
include_once 'Student.php';
class User {...}
学生。 php
namespace My\Test;
include_once 'User.php';
var_dump(in_array('User.php', get_included_files())); //true
var_dump(class_exist('User')); //false
var_dump(class_exist('\My\Namespace\User')); //false
var_dump(class_exist('My\Namespace\User')); //false - How can that be?
class Student extends User {...} //Fatal Error: Class My\Namespace\User not found
因此,这里发生的是用户类首先来自main.php。因为它有一些创建Students实例的静态方法,并且需要包含Students类文件。学生文件,因为它扩展用户,也包括User.php,但不应该执行,因为我使用了include_once。我甚至检查文件是否包含正确,但几行后我得到致命的错误。这两个文件具有相同的名称空间。
有趣的是,在我将类命名空间应用于我的类之前,所有工作都是有效的,所以我认为它是一些交叉包含具有相同名称空间的文件的错误。
试图从Student.php中删除include_once,它没有区别。
如果main.php包含User.php,并且User.php包含Student.php,为什么cant Student.php找不到User类?!
我在PHP版本5.5.9
见我的答案 - 你可能要稍微编辑您的帖子,因为你在这里列出的例子命名空间是“命名空间” - 这是不是一个有效的名称空间名称。在我的回答中,我将您的名称空间更改为“MyNamespace” - 但使用您在问题中遇到问题的实际名称空间将有助于确保答案对您的需求是准确的。 –