Namespaces ไม่ได้มีไว้สำหรับคลาสการโหลดอัตโนมัติเท่านั้น พวกเขายังป้องกันความขัดแย้งในการตั้งชื่อ ในความเป็นจริงนั่นคือจุดประสงค์หลักของพวกเขา
สมมติว่าคุณมีโครงการที่ต้องการคลาสที่มีชื่อUser
เพื่อจัดเก็บข้อมูลเกี่ยวกับผู้ใช้แอปพลิเคชันของคุณ แต่ปลั๊กอินยังใช้คลาส (ต่างกัน) ที่มีชื่อUser
เพื่อจัดเก็บข้อมูล เนมสเปซให้คุณสร้างคลาสของคุณภายในหนึ่งเนมสเปซ (พูดMyApp
) และให้ปลั๊กอินใช้เนมสเปซอื่น (พูดCoolPlugin
) โค้ดภายในMyApp
ช่องว่างสามารถอ้างถึงได้User
(เช่น, new User();
), และดังนั้นจึงสามารถโค้ดในCoolPlugin
ช่องว่าง; แต่ละคนจะได้รับผลลัพธ์ที่คาดหวัง เมื่อคุณต้องการใช้รหัสจากเนมสเปซอื่นคุณเพียง แต่นำหน้ามัน ตัวอย่างเช่นรหัสในCoolPlugin
ช่องว่างสามารถเข้าถึงUser
ชั้นเรียนMyApp
ผ่านทางnew \MyApp\User();
ทางเลือกคือว่าชั้นทุกความต้องการชื่อที่ซับซ้อนได้ทุกที่เช่นและclass MyApp_User
class CoolPlugin_User
เนมสเปซให้คุณลดความซับซ้อนของสิ่งต่าง ๆ ได้ตลอดเวลาและหลีกเลี่ยงการตั้งชื่อที่ขัดแย้งกันตลอดเวลา
แก้ไข:เพื่อตอบคำถาม "มีความแตกต่างระหว่างประสิทธิภาพทั้งสองหรือไม่"
ไม่ใช่คนที่มีความหมาย ฉันไม่ได้ทำการเปรียบเทียบ แต่อาจมีความแตกต่างในระดับนาโนวินาที ที่กล่าวว่าการเสียสละคุณภาพของรหัสสำหรับการปรับแต่งประสิทธิภาพขนาดเล็กพิเศษนั้นไม่ใช่กลยุทธ์ที่ดีดังนั้นคุณควรใช้เนมสเปซโดยไม่คำนึงถึง สำหรับมาตรฐานของชนิดที่คล้ายกันของปัญหาดูPHPbench.comและคำตอบนี้ StackOverflow
รหัสของคุณจะต้องเหลือเชื่อแน่นและไม่น่าเชื่อเวลาที่สำคัญ (คิดว่าการซื้อขายความถี่สูงหรือการจัดการปฏิกิริยานิวเคลียร์) ก่อนที่คุณจำเป็นต้องกังวลเกี่ยวกับไมโครเพิ่มประสิทธิภาพในชนิดของบริบทนี้ ถ้ามันจริงๆคือเวลาที่สำคัญที่คุณควรอาจจะเขียนโปรแกรมในคหรือแม้กระทั่งการชุมนุมไม่ตีความภาษาเช่น PHP