Сегодня я получил ошибку того же типа:
Неустранимая ошибка PHP: невозможно объявить класс Class \ Name \ Here, поскольку имя уже используется в /var/www/m2/magento2/app/code/path/to/the/class.php в строке 100
где строка 100 является концом файла.
Примерно после 4 часов отладки я действительно нахожу причину: опечатка в объявлении пространства имен. До последнего момента я не верил, что это опечатка в объявлении имен, но когда я переписал все имена заново - ошибка исчезла. Эта статья была очень полезна:
Я почесываю голову на некоторое время, удивляюсь, что происходит, и в конце концов осознаю, что это
Pulsetorm
то есть я набрал имя пространства имен, и когда начальная автозагрузка загружает файл класса, он не определил искомый класс, а затем второй автозагрузчик (обычно Composer) загружает его снова и пытается переопределить то же самое неправильный класс.
то есть, Magento хотел класс
Pulsestorm\Helloworld\Observers\Block
но я определил
Pulsetorm\Helloworld\Observers\Block
благодаря неправильному пространству имен.
Спасибо, Алан Сторм :)
ОБНОВИТЬ:
Другой тип этой ошибки - неправильное объявление пространства имен с отсутствующей частью пространства имен, как в этом примере:
Ошибка:
Генерация кода репозитория ... 1/7 [====> -----------------------] 14% 1 сек. 50,0 MiBPHP Фатальная ошибка: невозможно объявить Класс Migration \ Step \ Version11410to2000Test, поскольку имя уже используется в /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php на линия 109
где строка 109 является концом файла.
В файле vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php
мы нашли пространство имен, как Migration\Step
тогда, когда должно быть правильное пространство имен, Migration\Step\UrlRewrite
потому что путь к этому классу равен Migration/Step/UrlRewrite
. После изменения пространства имен Migration/Step/UrlRewrite
ошибка исчезла.