我目前正在重构一个半心半意地移植到 Yii 的项目。components 文件夹中有一些类包含在带有 PHP“use”-keyword 的控制器中。这给了我一个“include(protected/components/classes/SClass.php): failed to open stream: No such file or directory”错误。
真正奇怪的是,将名称(由“use”使用)更改为不存在的文件会给我一个致命错误。有任何想法吗?
PHP 中的use
关键字本身不包含其他文件。它只是告诉 PHP 语句中定义的名称空间use
可能被当前 PHP 文件中更下方的代码引用。
但是,这里可能发生的是您的系统autoload
定义了一个函数。如果有一个autoload
函数,PHP 将在遇到无法识别的类名时调用该函数。该autoload
函数搜索要加载的类文件,如果可以找到,则将其包含在内。这可能是您发生错误的地方。
在第一种情况下,这是事件的顺序:
use
语句引用了一个有效的命名空间,但在代码中引用了该命名空间中的一个类之前,它会被忽略。include()
在该路径上运行,但是该类不存在于自动加载器期望的位置。因此出现“找不到文件”错误。在第二种情况下,您更改use
语句:
use
语句现在引用了一个不同的命名空间,但您稍后可能没有更改实际引用该类的程序中的代码。use
语句,因此立即出现致命错误。您可能想要检查文件所有权和权限,并检查此处提到的 PHP 安全性