10

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

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 自动加载的正确方法是什么?

4

5 回答 5

11

在您的 composer.json 中使用:

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

或者

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

然后运行php composer.phar dump-autoload

于 2013-11-24T21:26:32.680 回答
3

利用

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

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

于 2013-11-24T21:26:02.127 回答
2

首先,

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

use Twitter;
$twitter = new Twitter();

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

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

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

于 2016-02-06T12:13:25.843 回答
1

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

于 2014-08-17T15:13:45.383 回答
0

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

于 2017-04-23T08:51:10.717 回答