composer自動ロードの4つの方法

3181 ワード

ComposerはPHPのパッケージ依存管理ツールで、RubyのRubyGemsやNodeのNPMのようなもので、公式ではありませんが、現在非常に流行しています.コポserの使い方ではなく、autoloadの内容に注目しましょう.
サードパーティ製パッケージの自動ロードについて、Composerは、PSR-0とPSR-4の自動ロード、class-mapの生成、filesを直接含む4つの方法のサポートを提供しています.
まず、メインファイルindexにautoload.phpを導入する.phpで.
require 'vendor/autoload.php';

PSR-4(推奨)
composerでjsonではこのように構成されています.
{
  "autoload": {
    "psr-4": {
      "Foo\\": "src/"
    }
  }
}
composer install更新自動ロードを実行します.PSR-4のルールに従って、index.phpでnew Foo\Bar\Bazというclassを試みた場合、composerは自動的に「src/Bar/Baz.php」というファイルを探し、存在する場合はロードします.
PSR-0(推奨しない)
composerでjsonではこのように構成されています.
{
  "autoload": {
    "psr-0": {
      "Foo\\": "src/"
    }
  }
}
composer install更新自動ロードを実行します.注意、PSR-0の規則に従って、index.phpでnew Foo\Bar\Bazというclassを試みた場合、composerは「src/Foo/Bar/Baz.php」というファイルを探し、存在する場合はロードします.
NOTE:また、PSR-4とPSR-0の構成では、「Foo」の末尾のネーミングスペースセパレータに「Foo」が「FooBar」に一致しないように、エスケープを加えてエスケープする必要があります.
Class-map方式
{
  "autoload": {
    "classmap": ["src/", "lib/", "Something.php"]
  }
}
composer install更新自動ロードを実行します.composerは指定ディレクトリの下をスキャンします.phpまたは.incの最後のファイルのclassは、指定したfile pathへのclassのマッピングを生成し、新しく生成されたvendor/composer/autoload_classmap.phpファイルに追加します.例えばsrc/の下にBaseControllerクラスがあると、autoload_classmap.phpファイルでは、このような構成が生成されます.
'BaseController' => $baseDir . '/src/BaseController.php'

クラスをインスタンス化する方法には、ここで2つの異なる状況があります.
  • ロードされたファイルにネーミングスペースがある場合は、ネーミングスペースで直接インスタンス化します.
  • ネーミングスペースがなければ、直接クラス名で実例化します.

  • Files方式
    {
      "autoload": {
        "files": ["src/MyLibrary/functions.php"]
      }
    }
    
    composer install更新自動ロードを実行します.Files方式とは、直接ロードするファイルを手動で指定することです.例えば、グローバルなhelper functionsがあります.helperファイルに入れて直接ロードすることができます.つまり、require 'vendor/autoload.php';で自動ロードクラスをロードすると、filesのファイルが自動的にロードされ、直接使用すればいいのです.
    変換元:https://getyii.com/topic/697