Tidak dapat mendeklarasikan antarmuka, karena nama tersebut sudah digunakan

12

Setelah membuat antarmuka sederhana di modul baru saya. Saya mengetik pengaturan bin / magento: di: compile, dan saya mendapatkan pesan kesalahan yang mengatakan bahwa nama tersebut sudah digunakan.

Ini kode saya:

namespace Company\Test\Api;

/*
 *  @api
 */
interface XyzInterface {
    public function getSomething();
}

Maka saya mendapatkan kesalahan ini:

Repositories code generation... 1/7 [====>-----------------------]  14% 2 secs 52.0 MiBPHP 
Fatal error:  Cannot declare interface Company\Test\Api\XyzInterface, because the name is already in use in .../app/code/Company/Test/Api/XyzInterface.php on line 13

Barisnya adalah "antarmuka XyzInterface" Saya tidak yakin apa yang saya lakukan salah.

Nelly
sumber
1
Bisakah Anda menjalankan perintah dengan opsi -vvv untuk melihat jejak stack? Mungkin file ini dimasukkan dua kali karena beberapa alasan.
BuskaMuza
Itu hanya menunjukkan "PHP Fatal Error"
Nelly
Anda juga dapat mencoba mengaktifkan xdebug. Saya pikir itu akan membantu menampilkan backtrace.
BuskaMuza
1
saya mendapatkan kesalahan ini juga karena kesalahan ketik "namespace"
Ansyori

Jawaban:

36

Hari ini saya menerima kesalahan tipe yang sama:

Kesalahan PHP Fatal: Tidak dapat mendeklarasikan kelas Kelas \ Nama \ Di Sini, karena nama tersebut sudah digunakan di /var/www/m2/magento2/app/code/path/to/the/class.php pada baris 100

di mana baris 100 adalah akhir file.

Kira-kira setelah 4 jam debugging saya benar-benar menemukan alasannya: salah cetak dalam deklarasi namespace. Hingga saat terakhir saya tidak percaya bahwa itu adalah kesalahan ketik dalam deklarasi nama, tetapi ketika saya telah menulis ulang semua nama lagi - kesalahan telah hilang. Artikel ini sangat membantu:

Aku akan menggaruk kepalaku sebentar, bertanya-tanya apa yang terjadi, dan akhirnya menyadari bahwa ini adalah ini

Pulsetorm

yaitu saya telah salah ketik nama namespace, dan ketika autoloads awal memuat file kelas, itu tidak akan mendefinisikan kelas yang dicari, dan kemudian autoloader kedua (biasanya komposer) memuatnya lagi, dan mencoba untuk mendefinisikan kembali yang sama kelas yang salah.

yaitu, Magento menginginkan kelas

Pulsestorm\Helloworld\Observers\Block

tapi saya mendefinisikan

Pulsetorm\Helloworld\Observers\Block

terima kasih untuk namespace yang salah.

Terima kasih, Alan Storm :)

MEMPERBARUI:

Tipe lain dari kesalahan itu adalah deklarasi Namespace yang salah dengan bagian namespace yang hilang, seperti dalam contoh ini:

Kesalahan:

Pembuatan kode repositori ... 1/7 [====> -----------------------] 14% 1 detik 50,0 MiBPHP Kesalahan fatal: Tidak dapat mendeklarasikan class Migration \ Step \ Version11410to2000Test, karena namanya sudah digunakan di /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.php on baris 109

di mana baris 109 adalah akhir file.

Dalam file tersebut vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.phpkami menemukan namespace seperti Migration\Stepketika namespace yang benar seharusnya Migration\Step\UrlRewritekarena path ke kelas ini Migration/Step/UrlRewrite. Setelah mengubah namespace ke Migration/Step/UrlRewritekesalahan hilang.

Siarhey Uchukhlebau
sumber
1
Saya memiliki masalah yang sama, ini masalah gila
Hamza Alayed
+1 untuk masalah namespace. Saya sudah membuang 2 jam. Terima kasih banyak!
wezzy
Juga hanya ingin menambahkan ini, berhati -hatilah ketika memberi nama direktori Anda sebagai casing harus cocok - ini juga bisa menjadi dua jam lagi terbuang sia-sia!
Smithee