Saya baru-baru ini mulai menggunakan namespace dalam PHP. Ketika saya pertama kali melihat mereka, saya pikir sintaksisnya jelek dan saya tidak pernah menggunakannya. Namun, saya membuat autoloader (spl_autoload_register) yang membuatnya sehingga saya tidak perlu menulis pernyataan sertakan / perlu lagi.
Saya suka ruang nama, tetapi apakah ada manfaat obyektif selain menyertakan / memerlukan pernyataan, atau apakah mereka metode yang sama persis untuk mencapai tujuan yang sama?
new \Vendor\Namespace\Class()
tanpa memerlukan pernyataan sebelumnya dalam metode atau kelas.Jawaban:
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 dinamaiUser
untuk menyimpan informasi. Namespaces memungkinkan Anda membuat kelas Anda dalam satu namespace (katakanlah,MyApp
) dan biarkan plugin menggunakan namespace lain (katakanlah,CoolPlugin
). Kode di dalamMyApp
ruang hanya bisa merujuk keUser
(misalnya,new User();
), dan begitu juga kode diCoolPlugin
ruang; masing-masing akan mendapatkan hasil yang diharapkan. Saat Anda perlu menggunakan kode dari namespace lain , Anda tinggal awali saja. Misalnya, kode dalamCoolPlugin
ruang dapat mengaksesUser
kelasMyApp
melaluinew \MyApp\User();
Alternatifnya adalah bahwa setiap kelas membutuhkan nama yang kompleks di mana-mana , seperti
class MyApp_User
danclass 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.
sumber