PSR-0は、クラスの名前空間を見て、その情報からハードドライブ上の位置を識別します。たとえば、クラスのZendMailMessageは/Path/to/Project/lib/vendor/zend/mail/message.php。
にもつながります
作曲家Composerが現れてPHPパッケージ管理の世界を席巻したとき、状況は変わりました。いくつかのルールのために、フォルダーはしばしば複製され、Composerを介してPSR-0クラスのインストールを見ると深くなりすぎました。たとえば、一部のフォルダー構造は次のようになりました:
これはせいぜい混oticとしています。なぜなら:
vendor/ vendor_name/ package_name/ src/ Vendor_Name/ Package_Name/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ Vendor_Name/ Package_Name/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
「SRC」および「テスト」ディレクトリには、ベンダーとパッケージのディレクトリ名を含める必要があります。これは、PSR-0コンプライアンスのアーティファクトです。
したがって、いくつかの高度に資格のあるPHP開発者が集まって、新しい標準の提案をまとめました:psr-4。psr-4
PSR-4は、必要に応じてPSR-0を補完し、協力することを目指しています。完全に置き換えるわけではありません。それはできますが、そうする必要はありません。 PSR-4の主な目標は、PSR-0の残骸と5。3日前の残骸を完全に除去し、より簡潔なフォルダー構造を可能にすることです。 PSR-4を使用すると、上記のフォルダーツリーが次のようになります:
これは非常に重要です。これは、PSR-4の実装を実装しながら、よりクリーンなパッケージを許可しているが、実装がはるかに複雑になることを意味します。 PSR-4パッケージ指向のオートローディングを呼び出します。これは、シンプルさの前にパッケージの清潔さを支持するためです。
これは、クラスをパッケージコードのどこにでも配置できることを意味します。これは、人間としての意味があります。
さらに、ドラフトは、複数のオートローダーが登録される可能性があるという理由だけで、PSR-4オートローダーが例外をスローしたりエラーを引き起こすことはないことを明示的に述べています。エラーとフローを停止すると、この互換性が壊れます。障害に関する追加情報が必要な場合は、PSR-3互換のロガーまたはその他の任意の手段を使用する必要があります。
新しいfoobarquxquuxを呼び出す場所;新しいfoobarquxquuxtestで、最初の登録ディレクトリからロードしようとします。 2番目からロードしようとします
PSR-4についてどう思いますか?以下のコメントでお知らせください。または、多くの議論の1つであなたの意見を表明してください。
提案された目標は次のとおりです。すべてのパッケージに少なくとも2つの名前空間レベル(ベンダーとパッケージ)が含まれている必要があることをPSR-0ルールに保ち、ベンダーパッケージコンボが任意のフォルダーにマッピングできることを確認し、INFIXを許可しますベンダーパッケージのコンボと、完全に資格のあるクラス名の残りの間のフォルダー。
vendor/
vendor_name/
package_name/
src/
Vendor_Name/
Package_Name/
ClassName.php # Vendor_Name\Package_Name\ClassName
tests/
Vendor_Name/
Package_Name/
ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
vendor/
vendor_name/
package_name/
src/
ClassName.php # Vendor_Name\Package_Name\ClassName
tests/
ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
PSR-0およびPSR-4オートローディング
に関するよくある質問
はい、同じプロジェクトでPSR-0とPSR-4の両方を使用することが可能です。ただし、同じクラスをオートロードするために使用すべきではないことに注意することが重要です。両方の標準を使用することは、一部のレガシーコードがPSR-0標準に従う大規模プロジェクトで有益であり、新しいコードはPSR-4標準に従います。
PSR-4は、オートローディングに対するより柔軟なアプローチを提供することにより、PSR-0を改善します。開発者は、名前空間の一部を任意のディレクトリにマッピングできるようになり、ディープディレクトリネストの必要性が減ります。これにより、プロジェクトのディレクトリ構造の管理とナビゲートが容易になります。
以上が自動車局の戦い:PSR-0対PSR-4の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。