web-dev-qa-db-ja.com

Composer自動読み込み

現在、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自動読み込みを使用する正しい方法は何ですか?

10
James Jeffery

Composer.jsonで使用するもの:

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

または

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

次に、php composer.phar dump-autoloadを実行します

11

使用する

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

これは、composerオートローダーを作成するように指示します。オートローダーは、src名前空間からすべてをTwitterで検索します。PSR-0であるため、名前空間が処理されます。フォルダとして宣言されたパスに追加されるため、composer.jsonのパス部分に含めないでください。

3

まず第一に、

私のindex.phpファイルは次のようになります:

use Twitter;
$Twitter = new Twitter();

Index.phpの場合は、最初にコンポーザーの自動ロードスクリプトを含めるのを忘れていました。

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

詳細については、 https://getcomposer.org/doc/01-basic-usage.md#autoloading を参照してください。

2
abuduba

Index.phpにエラーがあります。次のようになります:use Twitter\Twitter; $Twitter = new Twitter();または$Twitter = new Twitter\Twitter();

1
Quim Calpe

これは非常に遅い返信ですが、「自動読み込み」を機能させるために最初に必要なことは、PHPバージョンを5.6以降にすることです。

0
barudo