LoginSignup
1
1

More than 5 years have passed since last update.

composerのautoloadで簡単なプロジェクトを作った際に Fatal error: Class 'App\ClassName' not found

Posted at

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 としなければなりません。 プログラミングの世界における名前空間も、この延長線上にあります。

参考

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1