PHP命名空间混乱,找不到类
我在自己的文件中的同一文件夹中有两个类。但当我试图将一个扩展到另一个时,它给出了名称空间和类NotFound错误 信息:这是我第一次使用名称空间扩展类。嵌套的名称空间对我来说也是新的PHP命名空间混乱,找不到类,php,namespaces,Php,Namespaces,我在自己的文件中的同一文件夹中有两个类。但当我试图将一个扩展到另一个时,它给出了名称空间和类NotFound错误 信息:这是我第一次使用名称空间扩展类。嵌套的名称空间对我来说也是新的DB\CRUD我可能在做什么 名称空间完全错误 错误消息: 数据库类 文件:AT_Database.php 积垢级 文件:AT_CRUD.php 这可能是一个愚蠢的错误,也可能是我忽略了它(作为一个程序员,我不应该这样做),这就是类的加载顺序 也许它不值得作为一个答案,但只是在将来偶然添加,它可以帮助犯此类错误的人。
DB\CRUD
我可能在做什么
名称空间完全错误
错误消息:
数据库类
文件:AT_Database.php
积垢级
文件:AT_CRUD.php
这可能是一个愚蠢的错误,也可能是我忽略了它(作为一个程序员,我不应该这样做),这就是类的加载顺序 也许它不值得作为一个答案,但只是在将来偶然添加,它可以帮助犯此类错误的人。 正如我在一篇评论中提到的,我正在使用
glob
自动加载要包含的所有类文件
foreach ( glob( $this->classes_dir . "/*.php" ) as $class ) {
include_once $class;
}
现在我的文件名是AT_CRUD.php
和AT_Database.php
。在这里,我意识到php按字母顺序加载文件。因此,当我将AT_数据库
类扩展到AT_CRUD
时,它从未被找到
这只是因为php在_CRUD上首先加载
,而不是在_Database
上加载,所以要么我必须将该类实例化为@prehfeldt在其评论中提到的类,要么使用类似依赖注入的内容。请给出确切的错误消息!另外,您是包含还是自动加载AT_Database.php文件?我使用(glob($this->classes_dir./*.php)包含该类
我添加了有问题的错误消息。请看一看。另外,如果你精简\uu autoload
会比我使用的更好。请注意:扩展数据库类是一种糟糕的编码风格。你应该喜欢@RST没有任何区别。@CodeLover是的,最好的方法是使用依赖项注入模式将AT_Database
导入AT_CRUD
。有许多依赖项注入容器。例如,这是一个非常轻量级的容器。解释得很好。这说明了我更喜欢自动加载而不是此类包含的另一个很好的原因:)
namespace DB;
class AT_Database
{
...
}
namespace DB\CRUD;
use DB\AT_Database;
class AT_CRUD extends AT_Database
{
public function __construct()
{
}
}
foreach ( glob( $this->classes_dir . "/*.php" ) as $class ) {
include_once $class;
}