Composer自动加载

时间:2013-11-24 21:21:46

标签: php composer-php psr-0

我目前正在尝试使用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自动加载的正确方法是什么?

5 个答案:

答案 0 :(得分:11)

在你的composer.json中使用:

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

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

然后运行php composer.phar dump-autoload

答案 1 :(得分:3)

使用

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

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

的路径部分中

答案 2 :(得分:2)

首先,

  

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

     

use Twitter;
$twitter = new Twitter();

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

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

有关详细信息,请参阅https://getcomposer.org/doc/01-basic-usage.md#autoloading

答案 3 :(得分:1)

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

答案 4 :(得分:0)

这是一个非常晚的回复,但你要做的第一件事就是#34;自动加载&#34;作品是你的PHP版本是5.6及以上。