【问题标题】:Cannot autoload class using composer from within other autoloaded class file无法使用其他自动加载的类文件中的作曲家自动加载类
【发布时间】:2021-06-27 03:31:34
【问题描述】:

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

下面是我的目录树结构。

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

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

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

例子:

我正在尝试从 Config 文件夹中的 Config 类调用静态方法 ::GetDatabaseConfig() Database 文件夹中的 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 类时用作前缀。

我在这里缺少什么?如何解决?

【问题讨论】:

  • 您是否出于任何特殊原因使用 PSR-0 而不是 PSR-4?
  • 只是它迫使我严格按照我的目录和文件结构进行组织。
  • 为什么不使用use 语句正确导入类?如果你想跳过use,你必须使用类的absolute路径,比如\App\Config\Config::GetDatabaseConfig(前面有一个反斜杠)
  • 是的。这就是我现在正在做的事情。

标签: php namespaces composer-php autoload psr-0


【解决方案1】:

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

要解决此问题,您需要在 Config 类前面加上 \

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-18
    • 2018-03-30
    • 2014-08-15
    • 2014-10-11
    • 2013-02-02
    • 2018-02-27
    • 1970-01-01
    • 2014-04-24
    相关资源
    最近更新 更多