composerのautoloadで、psr-4の簡単なプロジェクトを作った際に Fatal error: Class 'App\ClassName' not found
が出て嵌まりました。
結論
ファイル名とクラス名が一致していなかった。
- autoloadでpsr-0,psr-4を指定する場合は、ファイル名とクラス名と一致していないといけない
- psr-0、psr-4のクラス名仕様
PSR-0、PSR-4のクラス名仕様
ComposerでPSR-4仕様のオートロードを設定する | Beaglee技術blogに書いてあるように、
ファイル名は<クラス名>.phpでなければなりません。
勘違いのもと
以下の公式ドキュメントを見て、namespaceがフォルダでクラス名がファイルみたいなことかと解釈。
そして、namespaceとクラス名でクラスを一意に特定できているから、ファイル名はクラスを特定する関係ないという勘違いの結論。
PHPの公式ドキュメントから引用
名前空間の概要
(PHP 5 >= 5.3.0, PHP 7)
名前空間とは何でしょう? 広義の「名前空間」とは、項目をカプセル化するもののことです。
これは多くの場面で見られる抽象概念です。 たとえば、たいていの OS はディレクトリでファイルをグルー
プ化します。 この場合、ディレクトリがその中のファイルの名前空間として機能しています。 具体的
に言うと、foo.txt というファイルは /home/greg と /home/other の両方に存在することが可能です
が、それらふたつの foo.txt を同じディレクトリに配置することはできません。 さらに、/home/greg
ディレクトリの外から foo.txt にアクセスするには、ディレクトリ名をファイル名の前につけて
/home/greg/foo.txt としなければなりません。 プログラミングの世界における名前空間も、この延長線上にあります。