无法使用作曲家从其他自动加载的类文件中自动加载类

Cannot autoload class using composer from within other autoloaded class file

提问人:Danish Nayeem 提问时间:3/31/2021 更新时间:3/31/2021 访问量:470

问:

我是使用 composer 使用“PSR-0”自动加载类的方式自动加载自定义类文件的新手。

下面是我的目录树结构。

Folder Structure

下面是我在 composer.json 文件中的 PSR-0 配置

enter image description here

在需要供应商/自动加载.php后从我的项目文件外部请求时,类自动加载很好

问题在于,当尝试从具有已定义命名空间的另一个类中加载一个类时。

例:

我正在尝试将静态方法 ::GetDatabaseConfig() 从 Config 文件夹中的 Config 类调用到 Database 文件夹中的 Database 类。 这是我在 Database 类中使用的代码。

数据库/数据库:.php

namespace App\Database;
class Database{
    public static $con;
    public static $connected = false;
    public static $error = false;
    public static $error_message = "";

    function __construct( $opt=false ){
        $config = App\Config\Config::GetDatabaseConfig();
        //REST....
    }
}

此代码不起作用并显示此错误。

致命错误:未捕获错误:在 /storage/emulated/0/code/durandal/htdocs/api/idan/App/Database/Database.php:13 中找不到类“App\Database\App\Config\Config”

我看到 Database.php 文件中使用的命名空间在请求 App\Config\Config 类时用作前缀。

我在这里错过了什么?如何解决?

命名空间 composer-php 自动加载 PSR-0

评论

1赞 yivi 3/31/2021
您是否出于任何特殊原因使用 PSR-0 而不是 PSR-4?
0赞 Danish Nayeem 3/31/2021
只是它迫使我严格组织我的目录和文件结构。
0赞 Nico Haase 3/31/2021
为什么不使用语句正确导入类?如果你想跳过 ,你必须使用类的绝对路径,比如(前面有一个反斜杠)useuse\App\Config\Config::GetDatabaseConfig
0赞 Danish Nayeem 3/31/2021
是的。这就是我现在正在做的事情。

答:

2赞 Edi Modrić 3/31/2021 #1

您使用的不是类的 FQCN,而是相对于命名空间的名称。ConfigApp\Database

要解决此问题,您需要在类前加上以下前缀:Config\

\App\Config\Config::GetDatabaseConfig();

或者更好的是,您可以导入类,然后将其与Configuse App\Config\Config;Config::GetDatabaseConfig()