アンダースコアがPSR-0規格でディレクトリ区切り文字に変換されるのはなぜですか?

StackOverflow https://stackoverflow.com//questions/11696219

  •  12-12-2019
  •  | 
  •  

質問

PSR-0(href="https://github.com/php-fig/fig-tandards/blob/master/accepted/psr-0.md" rel="nofollow noreferrer"> HTTPS://github.com/php-fig-tandards/blob/master/accepted/psr-0.md )標準クラス名のアンダースコアを対応するファイル内のディレクトリ区切り文字に変換するように指定します。名前。

標準がクラス名でアンダースコアを使用し、突然オートローダがクラスとあらゆる種類の奇妙なエラーを見つけることができない場合、これは良い考えではないようです。表示されます(たとえば、このStackOverFlowの問題を参照してください。例えば、 symfony2.1マッピングエラー:class_parents()

だから私はこの「機能」のためにある種の理由(いくつかのライブラリとの履歴互換性を?)がなければならないと思います。私の質問は、なぜこれがPSR-0規格で導入されたのかを知っていますか?

役に立ちましたか?

解決

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

プロジェクト内のファイルを整理するための一般的な「ルール」だけです。

SO:

のディレクトリ構造がある場合
root
  Name
    Package
      MyClass.php
.

人がしていた:

class Name_Package_MyClass {}
.

しかし我々は名前空間があるので、

namespace Name\Package;

class MyClass { }
.

株式会社は、誰もが同じことをしていることを保証します。

だからPSR-0は、ファイル名との名前での古いスタイルと新しいスタイルの両方をマッピングします。

他のヒント

PHPはバージョン5.3以降の名前空間をサポートしています。ほとんどの一般的な規則は、アンダースコアをネームスペース(ディレクトリ)区切り文字として使用することでした。私は後方互換性が主な理由であると思います。

PSR-0規格は、特定の特定のプロジェクトに対して書かれており、必ずしも独自のプロジェクトにとって最適な選択肢ではないことに注意してください。それが彼らのサイトで言うように:「他の人々が私たちがしていることを採用したいのなら彼らはそうすることを歓迎していますが、それは目的ではありません。」PSR-0は非常に制限的です、私は他の人がいるからといってそれを使うことを選択しません。あなたがプロジェクトから実際に欲しいものとそれがあなたにとって有益であるかどうかを検討してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top