6

PSR-0 ( https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md ) 標準では、クラス名のアンダースコアをディレクトリ区切り記号に変換する必要があることを指定しています。対応するファイル名。

標準を知らない人が無邪気にクラス名にアンダースコアを使用し、突然オートローダーがクラスを見つけられず、あらゆる種類の奇妙なエラーが表示されると、多くのエラーが発生するため、私にはこれは良い考えではないようです (たとえば、このスタックオーバーフローの問題: Symfony2.1 マッピング エラー: class_parents() )

したがって、この「機能」には何らかの理由(一部のライブラリとの歴史的な互換性?)があるに違いないと思います。私の質問は、なぜこれがPSR-0標準に導入されたのか知っている人はいますか?

4

3 に答える 3

6

PHP がまだ名前空間をサポートしていなかった時代には、アンダースコアが使用されていました。「正しく」編成されたプロジェクトは、ディレクトリ構造と同じ方法でファイルの名前空間を指定する規則に従います。

プロジェクト内のファイルを整理するのは、一般的な「規則」にすぎません。

したがって、ディレクトリ構造が次の場合:

root
  Name
    Package
      MyClass.php

人々はかつて次のことをしていました:

class Name_Package_MyClass {}

しかし、名前空間ができたので、次のようになります。

namespace Name\Package;

class MyClass { }

これは、誰もが同じことを行うことを保証するコーディング スタイルのガイドラインにすぎません。

したがって、PSR-0 が行うことは、名前空間の古いスタイルと新しいスタイルの両方をファイル名にマップすることです。

于 2012-07-27T22:02:57.143 に答える
1

PHP はバージョン 5.3 以降の名前空間をサポートしています。それ以前の最も一般的な規則は、名前空間 (ディレクトリ) の区切り文字としてアンダースコアを使用することでしMy_Project_ClassName/path/to/my/My/Project/ClassName。下位互換性が主な理由だと思います。

于 2012-07-27T22:05:07.987 に答える
1

PSR-0 標準はいくつかの特定のプロジェクト向けに作成されたものであり、必ずしも自分のプロジェクトにとって最適なオプションではないことに注意してください。彼らのサイトには次のように書かれています。PSR-0 は非常に制限的です。他の人がそうしているという理由だけで PSR-0 を使用することはありません。プロジェクトに実際に何を望んでいるのか、それがあなたにとって有益かどうかを検討してください。

于 2013-04-15T08:24:05.853 に答える