conocode
このコード
トラブルシューティング

Laravel で composer 走らせたら Warning: Ambiguous class resolution と警告

composer でモジュールインストールしようとしたらWarning: Ambiguous class resolution が出るんですけど
同じ定義のクラスが存在するんじゃない?

Laravel システム構築も終盤にさしかかったころ、インストールしたいモジュールがあったので composer を走らせたら

Warning: Ambiguous class resolution, “App\xxx” was found in both
“/hogehoge/xxx.php” and “/uiouio/xxx.php”, the first will be used

という警告が出てしまった。

意図せぬクラスが使われてしまうケースがあるため、警告と言えども動作的によろしくない状況のようです。

調べてみたところ、どちらか一方のファイルを削除しろとか、一方のクラス名を変えろとか対処法が出てきましたが、ちょっと違和感を感じました。

削除したりクラス名を変えたりすれば警告は消えるのでしょうが根本的な解決にはなっていない気がします。(警告を放置するのと同じでは?)

他にも同じクラス名のファイルなんてディレクトリ違いでいっぱいあるのに、xxx だけエラーなのが納得いきません。

そこで、同じクラス名でもエラーになっていないファイルとエラーになるファイルの違いを調べてみました。

警告の原因は?

エラーになっているファイルの一つで、namespace に記載しているパスが正しくありませんでした

ネームスペースとクラス名が完全に一致してしまっていたので、クラスを使うときに曖昧さが発生してしまう、ということでした。

クラスを作成する際に、他のファイルをコピーして使っていて、namespace の変更を忘れてしまったようです。

警告に対する対処

そのまんまですが、ファイル中の namespace を正しいものに変更したら、警告も消え、動作も正しいものになりました。