1. ホーム
  2. php

[解決済み】PSR-0とPSR-4の違いは何ですか?

2022-04-17 14:39:41

質問

最近、名前空間について読み、それがどのように有益であるかを知りました。現在、Laravelでプロジェクトを作成し、クラスマップのオートロードからネームスペースに移行しようとしています。しかし、PSR-0とPSR-4の実際の違いは何なのか、把握できていないようです。

私が読んだいくつかのリソースは...

理解できたこと

  • PSR-4はアンダースコアをディレクトリセパレータに変換しない
  • composer の特定のルールにより、ディレクトリ構造が複雑になり、PSR-0 の名前空間が冗長になるため、PSR-4 が作られました。

違いを説明する例があればありがたい。

どのように解決するのですか?

非常によく似ているので、少し混乱するのも無理はありません。要約すると、PSR-0 には PEAR スタイルのクラス名に関する後方互換機能がありましたが、PSR-4 ではそれが削除されており、そのため名前空間のあるコードしかサポートされていません。さらに、PSR-4では、名前空間全体をディレクトリ構造として持つことを強制せず、アンカーポイントに続く部分のみを持つことを強制しています。

例えば Acme\Foo\ 名前空間のアンカーは src/ PSR-0では、以下のようになります。 Acme\Foo\Barsrc/Acme/Foo/Bar.php で探すのに対して、PSR-4では src/Bar.php そのため、ディレクトリ構造を短くすることができます。一方、何がどの名前空間にあるのかを明確にするために、完全なディレクトリ構造を好む人もいるので、次のように言うこともできます。 Acme\Foo\ にあります。 src/Acme/Foo をPSR-4で使用すると、上記のPSR-0と同等の動作になります。

長くなりましたが、新しいプロジェクトやほとんどの目的では、PSR-4を使って、PSR-0のことをすべて忘れることができます。