【问题标题】:Composer Autoloading作曲家自动加载
【发布时间】:2013-12-09 11:27:11
【问题描述】:

我目前正在尝试通过 Composer 使用 PSR-0 自动加载,但出现以下错误:

Fatal error: Class 'Twitter\Twitter' not found

我的目录结构是这样的

- Project
    - src
        - Twitter
            Twitter.php
    - vendor
    - Test
    index.php

我的 index.php 文件如下所示:

<?php

    use Twitter;
    $twitter = new Twitter();

我的 Twitter.php 文件如下所示

<?php 

namespace Twitter;

class Twitter
{
    public function __construct()
    {
        // Code Here
    }
}

最后我的 composer.json 看起来像这样:

{
"require": {
    "phpunit/phpunit": "3.8.*@dev",
    "guzzle/guzzle": "3.7.*@dev"
},
"minimum-stability": "dev",
"autoload": {
    "psr-0": {
        "Twitter" : "src/Twitter"
    }
}
}

我有点糊涂了。我来自 C# 背景,这种工作方式让我有点困惑。使用 PSR-0 自动加载的正确方法是什么?

【问题讨论】:

  • 您还必须包含 autoloader.php 文件 - 但是,如果在 composer.json 文件中定义了其他所有内容,那么这很可能是您使用 require/include 显式加载的唯一内容.有关如何使用它的更多详细信息,请参阅 Composer 常见问题解答。

标签: php composer-php psr-0


【解决方案1】:

使用

"psr-0": {
     "Twitter" : "src/"
 }

这指示作曲家创建自动加载器,它将在 src 中查找来自 Twitter 命名空间的所有内容。由于是PSR-0,命名空间被视为文件夹并添加到声明的路径中,因此您不应将其包含在composer.json的路径部分中

【讨论】:

  • "so you should not include it composer.json"这是什么意思?
  • 少了几个字,你不应该把它包含在路径部分
  • 我仍然遇到同样的错误。是否有任何在线信息可以解释如何执行此操作?我的其余文件设置正确吗?
  • 我忘了添加... require 'vendor/autoload.php';
  • 至于文档,肯定有 - getcomposer.org/doc/04-schema.md#autoload
【解决方案2】:

在您的 composer.json 中使用:

"autoload": {
    "psr-0": {
        "": "src/"
    }
}

或

"autoload": {
    "psr-0": {
        "Twitter\\": "src/"
    }
}

然后运行php composer.phar dump-autoload

【讨论】:

    【解决方案3】:

    你的 index.php 有错误,应该是: use Twitter\Twitter; $twitter = new Twitter(); 要么 $twitter = new Twitter\Twitter();

    【讨论】:

      【解决方案4】:

      首先,

      我的 index.php 文件如下所示:

      use Twitter;
      $twitter = new Twitter();
      

      如果是你的 index.php,你忘了先包含作曲家的自动加载脚本。

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

      详情请见https://getcomposer.org/doc/01-basic-usage.md#autoloading。

      【讨论】:

        【解决方案5】:

        这是一个很晚的回复,但您需要使“自动加载”工作的第一件事是让您的 PHP 版本为 5.6 及更高版本。

        【讨论】:

          猜你喜欢
          • 2013-03-05
          • 2015-09-24
          • 2018-06-15
          • 2016-07-08
          • 2014-09-14
          • 1970-01-01
          • 1970-01-01
          • 2014-08-15
          相关资源
          最近更新 更多