ComposerでPSR-4仕様のオートロードを設定する

By | 2014年1月22日

雪が降ったら雪見酒がしたい。yukiです。

昨年の3日にPSR-0で提言されていたオートローダーの仕様を、現状に合わせてアップデートしたPSR-4が承認されました。

PSR-4のクラス名仕様

説明の中で完全修飾クラス名というのが出てきますが、次のような定義になっています。

  • 完全修飾クラス名はベンター名のネームスペースをトップレベルに持っていること。
  • 完全修飾クラス名は1つ以上のサブネームスペースを持つことができる。
  • 完全修飾クラス名の最後はクラス名になっていること。
  • アンダースコアはディレクトリの区切りではなく、そのまま名前として使用される。
  • 完全修飾クラス名は、アルファベットの大小を好きなように組み合わせることができる。
  • クラスを参照する時はアルファベットの大小を区別すること。

さきほどの完全修飾クラス名の定義を書き直すと次のようになります。

 

Composerのオートロード設定

Composerも今年の3日にPSR-4へ対応されました。
https://github.com/composer/composer/commit/b23742e30c88e288db70685cfe2022f6b120c75b

PSR-0の頃の設定を見比べてみます

psr-0psr-4以外記述方法に違いはありませんが、設定値の意味が変わっています。

 

PSR-0とPSR-4のクラスファイルの解決方法の違いについて

PSR-0の場合

  • アンダースコアとネームスペースの区切りがディレクトリの区切りとなる。
  • 指定したネームスペースがベースディレクトリ内に存在する。
  • ファイル名は<クラス名>.phpとなる。

PSR-4の場合

  • ネームスペースの区切りがディレクトリの区切りとなる。
  • 完全修飾クラス名の指定したネームスペースプレフィックス以降がベースディレクトリ内に存在する。
  • ファイル名は<クラス名>.phpとなる。

 

先程の設定例を適用すると次の構造に対応します。

完全修飾クラス名 ファイルパス
\Menue\Foo psr0/lib/Menue/Foo.php
\Menue\Test\Bar psr0/lib/Menue/Test/Bar.php
\Menue\Baz psr0/lib/Menue/Test/Baz.php
\Menue\Hoge psr4/lib/Hoge.php
\Menue\Test\Fuga psr4/tests/Fuga.php

2 thoughts on “ComposerでPSR-4仕様のオートロードを設定する

  1. Pingback: 自分のプロジェクトにComposer及びオートロードを導入した | JohnNakazawaのIT的活動記録

  2. Pingback: Class ‘RAFIE\Twig\TwigViewServiceProvider’ not found « くちなわのしょ::おねーさんブログ分室

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です