无论我做什么,作曲家自动加载都不起作用

Composer autoload doesn't work regardless of whatever I do

我有一个项目,我需要一些包,所以我重新组织了项目以使用 PSR-4

这是我的composer.json

{
    "name": "me/production",
    "type": "project",
    "authors": [
        {
            "name": "Me",
            "email": "me@me.com"
        }
    ],

    "config": {
        "platform": {
            "php": "5.6.1"
        }
    },
    "autoload": {
      "psr-4": {
        "API\": "api/"
      }
    },

    "require": {
        "nesbot/carbon": "^2.25"
    },

}

它在我的脚本中不起作用。但是,真正的问题在于:我在 php 控制台中执行 require_once __DIR__ . '/vendor/autoload.php';,但它也不起作用。我对路径进行了三次和四次检查,自动加载就在那里。

"doesn't work" 是什么意思?自动加载要求成功。它允许我 使用 库。但是实际实例化导致

Class not found error.

不仅是我在 API 命名空间中的 类,它们位于文件顶部的命名空间中,并且恰好位于它们应该位于的文件夹中,而且我也无法实例化碳。我可以 use Carbon\Carbon 但任何实例化尝试都会失败。

有趣的是,直接实例化\Carbon\Carbon并没有失败。

这是怎么回事?这很奇怪。

提前致谢。

编辑:我尝试重新转储自动加载器,我还尝试删除供应商文件夹并重新安装。都无济于事。

编辑:值得一提的是,我将碳降级为 ^1.21,因为碳 2 不支持 php 5.6。但是还是不行。

编辑:它也发生在我的 API 命名空间中,这是一个使用我的 Instagram API:

实现的示例
 use \API\Insta;
php > var_dump(new Insta);
PHP Fatal error:  Class 'Insta' not found in php shell code on line 1
php > var_dump(new \API\Insta);
object(API\Insta)#3 (1) {
  ["ig_token"]=>
  string(51) "A_VALID_TOKEN"
}
php > 

编辑:问题自行解决,现在已经变成我不太关心的问题:我可以使用所有东西,但不能在 php 控制台中使用。我不确定是什么修复了它。

如您所知,nesbot/carbon,版本 2.25 至少需要 PHP v7.1.8。

仅使用 use 语句不会检查任何内容,而是会创建一个可以使用的本地别名。如果你尝试使用不存在的东西,那么它只会失败。

请说明您的目录结构如下:

  • ./composer.json
  • ./composer.lock
  • ./Api/Insta.php

并在文件中 Api/Insta.php:

namespace API;  // this is your top namespace name
use Carbon/Carbon; // etc
class Insta { ... }

命名空间与目录名称不同会导致混淆。

还会有索引。php/front-controller 拉入 vendor/autoload.php 文件并大概运行框架。