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 を正しいものに変更したら、警告も消え、動作も正しいものになりました。