Aujourd'hui, j'ai reçu l'erreur de même type:
Erreur fatale PHP: Impossible de déclarer la classe Class \ Name \ Here, car le nom est déjà utilisé dans /var/www/m2/magento2/app/code/path/to/the/class.php sur la ligne 100
où la ligne 100 est à la fin du fichier.
Environ après 4 heures de débogage, je trouve vraiment la raison: une erreur d'impression dans la déclaration de l'espace de noms. Jusqu'au dernier moment, je ne croyais pas qu'il s'agissait d'une erreur typographique dans la déclaration des noms, mais quand j'ai réécrit tous les noms à nouveau - l'erreur a disparu. Cet article a été très utile:
Je vais me gratter la tête pendant un moment, me demander ce qui se passe, et finalement réaliser que c'est ça
Pulsetorm
c'est-à-dire que j'ai mal tapé un nom d'espace de noms, et lorsque le chargement automatique initial charge le fichier de classe, il n'aura pas défini la classe qu'il recherche, puis un deuxième chargeur automatique (généralement Composer) le charge à nouveau et essaie de redéfinir le même classe incorrecte.
c'est-à-dire que Magento voulait la classe
Pulsestorm\Helloworld\Observers\Block
mais j'ai défini
Pulsetorm\Helloworld\Observers\Block
grâce au mauvais espace de noms.
Merci, Alan Storm :)
MISE À JOUR:
Un autre type de cette erreur est une déclaration d'espace de noms incorrecte avec une partie manquante de l'espace de noms, comme dans cet exemple:
Erreur:
Génération de code des référentiels ... 1/7 [====> -----------------------] 14% 1 sec 50.0 MiBPHP Erreur fatale: impossible de déclarer classe Migration \ Step \ Version11410to2000Test, car le nom est déjà utilisé dans /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php sur ligne 109
où la ligne 109 est à la fin du fichier.
Dans le fichier, vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php
nous avons trouvé l'espace de noms comme Migration\Step
lorsque l'espace de noms correct devrait être Migration\Step\UrlRewrite
car le chemin d'accès à cette classe est Migration/Step/UrlRewrite
. Après le changement de l'espace de noms, Migration/Step/UrlRewrite
l'erreur a disparu.