我目前正在重构一个已经半心半意地移植到Yii的项目。 components文件夹中有一些类包含在带有“use”-keyword的控制器中。这给了我一个“include(protected / components / classes / SClass.php):无法打开流:没有这样的文件或目录”错误。
真正奇怪的是,将名称(由“use”使用)更改为不存在的文件会给我带来致命错误。有什么想法吗?
答案 0 :(得分:4)
PHP中的use
关键字本身不包括其他任何文件。它只是告诉PHP,use
语句中定义的命名空间可能会被当前PHP文件中的代码引用。
但是,这里可能发生的是您的系统定义了autoload
函数。如果存在autoload
函数,PHP将在遇到无法识别的类名时调用此函数。 autoload
函数搜索要加载的类文件,如果可以找到它则包含它。这可能是您的错误发生的地方。
在第一种情况下,这是事件序列:
use
语句引用了有效的命名空间,但在代码中引用该命名空间中的类之前,这将被忽略。include()
,但该类不存在自动加载器所需的位置。因此,“找不到文件”错误。在第二种情况下,您更改use
语句:
use
语句现在引用了不同的命名空间,但您可能以后在实际引用该类的程序中没有更改代码。use
语句匹配,因此即时致命错误。答案 1 :(得分:0)
您可能需要检查文件所有权和权限,并检查PHP安全性,如上所述HERE