【问题标题】:Issue with Composer AutoloadComposer 自动加载问题
【发布时间】:2020-06-17 22:21:19
【问题描述】:

我对 Autoload Composer 有点陌生,但希望我的作曲家概念是正确的:基本上你交出一些基本信息(composer.json),然后作曲家生成你必须包含的类,然后完成工作你自找的。对吧?

好吧,在尝试设置 Autoload Composer 数小时后,这就是我的结果:

作曲家.json:

    "name": "lordrazen/dpgenerator",
    "description": "Page to generate Datapacks out of Rawfiles",
    "type": "project",
    "license": "GPL",
    "authors": [
        {
            "name": "LordRazen",
            "email": "something@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {},
    "autoload": {
        "psr-4": {"Inc\\": "inc/"}
    }
}

文件夹“Inc”中的类“Test.php”

namespace Inc;

class Test {

}

索引.php

if (file_exists(dirname(__FILE__) . '/vendor/autoload.php')) {
        require_once (dirname(__FILE__) . '/vendor/autoload.php');
    }

    $test = new Test();

我还去了控制台中的项目目录并点击“composer update”命令。

嗯……还是不行:

致命错误:未捕获的错误:在 [...]/index.php:34 中找不到类“测试”堆栈跟踪:在第 34 行的 [...]/index.php 中抛出 #0 {main}

我的错误是什么?

【问题讨论】:

  • 您说您在Inc 中有类Test.php,或者您在自动加载器中定义了命名空间Inc\` for the folder inc`。试着把它写成大写。
  • 您是否尝试过使用正确的类名?您的项目中是否有任何类 Test没有任何命名空间,或者您是否在 Index.php 中导入了该命名空间?

标签: php composer-php autoload


【解决方案1】:

在命名空间 Inc 中有一个类 Test,但在实例化该类时没有使用它。只需将其附加到根文件夹index.php 中,如下所示:

<?php

require_once __DIR__ . '/vendor/autoload.php';

$test = new \Inc\Test();

【讨论】:

  • 等一下,我可能理解错了:我认为命名空间是为了“更好地阅读”,包括:而不是 include('path-to-file.php') 你可以写如果命名空间在 Class 中设置正确,则“使用 Inc\Folder\Class”。除此之外,我认为自动加载应该避免课程开头的几十个“使用”注释。只需自动加载一次,您就可以在没有命名空间等的情况下使用它们 - 这是错误的吗?
  • 命名空间的目的是将类封装/组合在一起。想想 App/Util/* 和 App/Config/* 。在命名空间存在之前,有很长的类名,例如App_Config_JsonReader。命名空间还有助于避免类名冲突。 -- use 语句使您能够将经常使用的命名空间声明缩短为更简单的别名(别名),并有助于导入整个命名空间类或仅特定元素,例如一个常数或一个函数。 -- 是的,通过自动加载,您不再需要/包含。类名映射到它们的文件并按名称加载。
  • 然后我的误解是,我认为在激活命名空间并在这里自动加载后:require_once (dirname(__FILE__) . '/vendor/autoload.php'); 您可以只使用类名创建新对象,但它是命名空间和类名,对吧? Wrong: new Class(); Right: new Inc\Folder\Class();
  • 是的,完全正确!您需要两个名称 - “命名空间类名”。它被称为fully qualified class name
  • 很高兴我能帮上忙。
猜你喜欢
  • 2018-07-11
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 2014-03-24
  • 1970-01-01
  • 2013-11-03
  • 2019-10-11
  • 2021-03-18
相关资源
最近更新 更多