วันนี้ฉันได้รับข้อผิดพลาดประเภทเดียวกัน:
ข้อผิดพลาดร้ายแรงของ 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
เป็นข้อผิดพลาดจะหายไป