Ruang nama tidak hanya untuk kelas autoloading. Mereka juga mencegah konflik penamaan. Padahal, itulah tujuan utama mereka.
Katakanlah Anda memiliki proyek yang memerlukan kelas yang bernama User
, untuk menyimpan info tentang pengguna aplikasi Anda, tetapi sebuah plugin juga menggunakan kelas (berbeda) yang dinamai User
untuk menyimpan informasi. Namespaces memungkinkan Anda membuat kelas Anda dalam satu namespace (katakanlah, MyApp
) dan biarkan plugin menggunakan namespace lain (katakanlah, CoolPlugin
). Kode di dalam MyApp
ruang hanya bisa merujuk ke User
(misalnya, new User();
), dan begitu juga kode di CoolPlugin
ruang; masing-masing akan mendapatkan hasil yang diharapkan. Saat Anda perlu menggunakan kode dari namespace lain , Anda tinggal awali saja. Misalnya, kode dalam CoolPlugin
ruang dapat mengakses User
kelas MyApp
melaluinew \MyApp\User();
Alternatifnya adalah bahwa setiap kelas membutuhkan nama yang kompleks di mana-mana , seperti class MyApp_User
dan class CoolPlugin_User
. Ruang nama memungkinkan Anda menyederhanakan banyak hal dan menghindari konflik penamaan sepanjang waktu.
Sunting: Untuk menjawab pertanyaan, "Apakah ada perbedaan kinerja antara keduanya?"
Bukan yang berarti, tidak. Saya belum membandingkannya, tetapi mungkin ada perbedaan pada tingkat nanodetik. Yang mengatakan, mengorbankan kualitas kode untuk tweak kinerja super kecil bukanlah strategi yang baik, jadi Anda harus menggunakan ruang nama apa pun. Untuk tolok ukur masalah serupa, lihat PHPbench.com dan jawaban StackOverflow ini .
Kode Anda harus sangat ketat dan sangat sensitif terhadap waktu (pikirkan perdagangan frekuensi tinggi atau kelola reaksi nuklir) sebelum Anda perlu khawatir tentang pengoptimalan mikro dalam konteks seperti ini. Jika itu benar-benar sensitif terhadap waktu, Anda mungkin harus mengkode dalam c atau bahkan assembly , bukan bahasa yang ditafsirkan seperti PHP.