composer自動ロードの4つの方法
ComposerはPHPのパッケージ依存管理ツールで、RubyのRubyGemsやNodeのNPMのようなもので、公式ではありませんが、現在非常に流行しています.コポserの使い方ではなく、autoloadの内容に注目しましょう.
サードパーティ製パッケージの自動ロードについて、Composerは、PSR-0とPSR-4の自動ロード、class-mapの生成、filesを直接含む4つの方法のサポートを提供しています.
まず、メインファイルindexに
PSR-4(推奨)
composerでjsonではこのように構成されています.
PSR-0(推奨しない)
composerでjsonではこのように構成されています.
NOTE:また、PSR-4とPSR-0の構成では、「Foo」の末尾のネーミングスペースセパレータに「Foo」が「FooBar」に一致しないように、エスケープを加えてエスケープする必要があります.
Class-map方式
クラスをインスタンス化する方法には、ここで2つの異なる状況があります.ロードされたファイルにネーミングスペースがある場合は、ネーミングスペースで直接インスタンス化します. ネーミングスペースがなければ、直接クラス名で実例化します.
Files方式
変換元:https://getyii.com/topic/697
サードパーティ製パッケージの自動ロードについて、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