ไม่สามารถประกาศอินเทอร์เฟซเนื่องจากชื่อนี้มีการใช้งานแล้ว


12

หลังจากสร้างอินเตอร์เฟสที่เรียบง่ายในโมดูลใหม่ของฉัน ฉันพิมพ์ในการตั้งค่าถังขยะ / วีโอไอพี: di: รวบรวมและฉันได้รับข้อผิดพลาดบอกว่าชื่อนี้มีการใช้งานแล้ว

นี่คือรหัสของฉัน:

namespace Company\Test\Api;

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

จากนั้นฉันได้รับข้อผิดพลาดนี้:

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

บรรทัดคือ "ส่วนต่อประสาน XyzInterface" ฉันไม่แน่ใจว่าฉันทำอะไรผิด


1
คุณช่วยกรุณารันคำสั่งด้วยตัวเลือก -vvv เพื่อดู stack trace? อาจเป็นไฟล์ที่รวมสองครั้งด้วยเหตุผลบางอย่าง
BuskaMuza

มันเพิ่งแสดง "PHP Fatal Error"
Nelly

คุณสามารถลองเปิดใช้งาน xdebug ฉันคิดว่ามันน่าจะช่วยแสดง backtrace
BuskaMuza

1
ฉันได้รับข้อผิดพลาดนี้เนื่องจากการพิมพ์ "namespace" ที่พิมพ์ผิด
Ansyori

คำตอบ:


36

วันนี้ฉันได้รับข้อผิดพลาดประเภทเดียวกัน:

ข้อผิดพลาดร้ายแรงของ PHP: ไม่สามารถประกาศคลาส \ ชื่อ \ ที่นี่ได้เนื่องจากมีการใช้ชื่อใน /var/www/m2/magento2/app/code/path/to/the/class.php บรรทัด 100 แล้ว

โดยที่บรรทัด 100 เป็นจุดสิ้นสุดของไฟล์

หลังจากการดีบักประมาณ 4 ชั่วโมงฉันพบเหตุผลจริงๆ: มีการพิมพ์ผิดในการประกาศ namespace จนกระทั่งวินาทีสุดท้ายฉันไม่เชื่อว่ามันเป็นข้อผิดพลาดในการพิมพ์ชื่อในการประกาศชื่อ แต่เมื่อฉันได้เขียนชื่อทั้งหมดใหม่อีกครั้งความผิดพลาดก็หายไป บทความนี้มีประโยชน์มาก:

ฉันจะเกาหัวของฉันในขณะที่สงสัยว่าเกิดอะไรขึ้นและในที่สุดก็ตระหนักถึงสิ่งนี้

Pulsetorm

เช่นฉันพิมพ์ชื่อ namespace ผิดและเมื่อ autoloads เริ่มต้นโหลดไฟล์ class มันจะไม่ได้กำหนด class ที่ต้องการจากนั้น autoloader ตัวที่สอง (โดยปกติแล้วนักแต่งเพลง) จะโหลดอีกครั้งและพยายามกำหนดใหม่เช่นเดียวกัน คลาสไม่ถูกต้อง

เช่น Magento ต้องการชั้นเรียน

Pulsestorm\Helloworld\Observers\Block

แต่ฉันกำหนดไว้

Pulsetorm\Helloworld\Observers\Block

ขอบคุณเนมสเปซที่ไม่ถูกต้อง

ขอบคุณ Alan Storm :)

UPDATE:

ข้อผิดพลาดประเภทอื่นคือการประกาศ Namespace ที่ไม่ถูกต้องโดยขาดส่วนหนึ่งของเนมสเปซดังในตัวอย่างนี้:

ข้อผิดพลาด:

การสร้างรหัสที่เก็บ ... 1/7 [====> -----------------------] 14% 1 วินาที 50.0 MiBPHP ข้อผิดพลาดร้ายแรง: ไม่สามารถประกาศ การโอนย้ายคลาส \ Step \ Version11410to2000Test เนื่องจากชื่อนี้มีการใช้งานแล้วใน /var/www/vhosts/rwld/vendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410toTest บรรทัดที่ 109

โดยที่บรรทัดที่ 109 เป็นจุดสิ้นสุดของไฟล์

ในแฟ้มvendor/magento/data-migration-tool/tests/unit/testsuite/Migration/Step/UrlRewrite/Version11410to2000Test.phpที่เราพบ namespace เป็นMigration\Stepเมื่อ Namespace ที่ถูกต้องควรจะเป็นเพราะเส้นทางไปยังชั้นนี้คือMigration\Step\UrlRewrite Migration/Step/UrlRewriteหลังจากเปลี่ยน namespace Migration/Step/UrlRewriteเป็นข้อผิดพลาดจะหายไป


1
ฉันมีปัญหาเดียวกันนี่เป็นปัญหาที่บ้า
Hamza Alayed

+1 สำหรับปัญหาเนมสเปซ ฉันเสียเวลา 2 ชั่วโมง ขอบคุณมาก!
wezzy

1
เพียงแค่ต้องการเพิ่มสิ่งนี้ให้ระวังเป็นพิเศษเมื่อตั้งชื่อไดเรกทอรีของคุณเนื่องจากตัวเรือนจะต้องตรงกับ - สิ่งนี้อาจเสียเวลาอีกสองชั่วโมง!
Smithee
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.