我在自己的文件中有两个类在同一个文件夹中。但是当我试图将一个扩展到另一个时,它会给命名空间和类找不到错误。
信息:这是我第一次使用命名空间扩展类。嵌套命名空间对我来说也是新的。
DB\CRUD
我可能正在这样做 命名空间完全错误。
Fatal error: Class 'DB\AT_Database' not found in /var/www/...
文件:AT_Database.php
namespace DB;
class AT_Database
{
...
}
档案:AT_CRUD.php
namespace DB\CRUD;
use DB\AT_Database;
class AT_CRUD extends AT_Database
{
public function __construct()
{
}
}
答案 0 :(得分:3)
这可能是一个愚蠢的错误,或者可能是我忽略了它(我不应该作为程序员)并且正在加载该类的序列。
可能不值得作为答案,但只是偶然添加它可以帮助犯错误的人。
正如我在其中一条评论中提到的,我正在使用glob
自动加载要包含的所有类文件。
foreach ( glob( $this->classes_dir . "/*.php" ) as $class ) {
include_once $class;
}
现在我的文件名是AT_CRUD.php
和AT_Database.php
。在这里,我意识到php按字母顺序加载文件。因此,当我将AT_Database
课程延伸到AT_CRUD
时,它从未找到。
这只是因为php首先加载AT_CRUD
而不是AT_Database
所以要么我必须将类实例化为或者使用依赖注入这样的东西,如@prehfeldt在他的评论中提到的那样。