psr-0
PSR-0は、5.2以前からの移行を容易にするために、代替としてクラス名のアンダースコアもサポートしています。 zend_mail_messageは/path/to/project/lib/vendor/zend/mail/message.php.
にもつながります。Composer
ベンダー/ vendor_name/ package_name/ SRC/ vendor_name/ package_name/ classname.php#vendor_name \ package_name \ className テスト/ vendor_name/ package_name/ classnametest.php#vendor_name \ package_name \ classnametest
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
ベンダー/ vendor_name/ package_name/ SRC/ classname.php#vendor_name \ package_name \ className テスト/ 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-4パッケージ指向のオートローディングと呼びます。これは、シンプルさの前にパッケージの清潔さを支持するためです。
選ばれたアプローチ
さらに、ドラフトは、複数のオートローダーが登録される可能性があるという理由だけで、PSR-4オートローダーが例外を投げたりエラーを引き起こしたりしてはならないことを明示的に述べています。障害に関する追加情報が必要な場合は、PSR-3互換のロガーまたはその他の任意の手段を使用する必要があります。
例ファイルに示されているように、PSR-4オートローダーを使用して次の構造からクラスをロードします。
/path/to/packages/foo-bar/ SRC/ baz.php#foo \ bar \ baz qux/ quux.php#foo \ bar \ qux \ quux テスト/ baztest.php#foo \ bar \ baztest qux/ quuxtest.php#foo \ bar \ qux \ quuxtest
は次のようになります:
/path/to/packages/foo-bar/ src/ Baz.php # Foo\Bar\Baz Qux/ Quux.php # Foo\Bar\Qux\Quux tests/ BazTest.php # Foo\Bar\BazTest Qux/ QuuxTest.php # Foo\Bar\Qux\QuuxTest
new \ foo \ bar \ qux \ quuxを呼び出す場所new \ foo \ bar \ qux \ quuxtest。 2番目からロードしようとします。
register(); // register the base directories for the namespace prefix $loader->addNamespace('Foo\Bar', '/path/to/packages/foo-bar/src'); $loader->addNamespace('Foo\Bar', '/path/to/packages/foo-bar/tests');
結論
オートローディングには銀の弾丸はありません。それぞれのアプローチには、長所と短所があります。PSR-4は、より単純なフォルダー構造を可能にしますが、完全に資格のある名前を見るだけでクラスの正確なパスを知ることができません。一方、PSR-0はハードドライブで混oticとしていますが、過去に立ち往生している開発者をサポートしています(クラスインアンダースコアユーザー)。その名前を見るだけでクラスの場所を識別するのに役立ちます。
PSR-4についてどう思いますか?以下のコメントでお知らせください。または、多くの議論の1つであなたの意見を表明してください。PSR-0およびPSR-4 Autoloading
に関するよくある質問PSR-0とPSR-4の主な違いは何ですか? PSR-0には、名前空間とディレクトリ構造の間の直接的な相関が必要です。つまり、名前空間の各アンダースコアはディレクトリセパレーターに対応しています。一方、PSR-4は、名前空間の一部を任意のディレクトリにマッピングでき、名前空間の残りの部分をサブディレクトリ構造にマッピングできる、より柔軟なアプローチを可能にします。名前空間とディレクトリ構造の間のPSR-0の厳密な相関は、必ずしも実用的または効率的ではなかった深くネストされたディレクトリにつながりました。 PSR-4は、より柔軟なアプローチを提供し、開発者が名前空間を任意のディレクトリにマッピングできるようにし、ディープディレクトリネストの必要性を減らします。ただし、同じクラスをオートロードするために使用すべきではないことに注意することが重要です。両方の標準を使用すると、一部のレガシーコードがPSR-0標準に従う大規模プロジェクトでは有益ですが、新しいコードはPSR-4標準に従います。開発者は、名前空間の一部を任意のディレクトリにマッピングできるようになり、ディープディレクトリネストの必要性が減ります。これにより、プロジェクトのディレクトリ構造を管理してナビゲートしやすくなります。これは、まだ機能しているが、新しいプロジェクトでの使用をお勧めしないことを意味します。 PSR-4は、PHPでの自動装置の推奨標準です。その後、名前空間の残りの部分は、サブディレクトリ構造にマッピングされます。これにより、自動装置へのより柔軟で効率的なアプローチが可能になります。また、PHPでの自動装置の推奨基準であり、新しいプロジェクトに適した選択肢となります。
PSR-0からPSR-4? PSR-4では、名前空間の一部を任意のディレクトリにマッピングでき、名前空間の残りの部分をサブディレクトリ構造にマッピングできます。これには、プロジェクトのディレクトリ構造を再構築する必要がある場合があります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3