3
Takeaways Key
PSR-0 dan PSR-4 adalah piawaian autoloading dalam PHP, dengan laluan yang menentukan PSR-0 berdasarkan ruang nama kelas dan membolehkan garis bawah dalam nama kelas, manakala PSR-4 bertujuan untuk memudahkan struktur folder dan mengeluarkan sisa-sisa PSR- 0.
PSR-0 juga menyokong garis bawah dalam nama kelas sebagai alternatif, untuk membuat peralihan dari 5.2 dan lebih awal lebih mudah. Zend_mail_message juga akan membawa kepada /path/to/project/lib/vendor/zend/mail/message.php.
Apabila komposer muncul dan mengambil dunia pengurusan pakej PHP dengan ribut, perkara berubah. Oleh kerana beberapa peraturannya, folder sering diduplikasi dan menjadi terlalu mendalam apabila melihat pemasangan kelas PSR-0 melalui komposer. Sebagai contoh, beberapa struktur folder berakhir seperti ini:
ini huru -hara yang terbaik, kerana:
direktori "SRC" dan "Ujian" perlu memasukkan nama direktori vendor dan pakej. Ini adalah artifak pematuhan PSR-0.
vendor/ vendor_name/ package_name/ src/ Vendor_Name/ Package_Name/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ Vendor_Name/ Package_Name/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
psr-4
PSR-4 bertujuan untuk melengkapkan dan bekerjasama dengan PSR-0 jika perlu, tidak menggantikannya sepenuhnya. Ia boleh, tetapi tidak perlu. Matlamat utama PSR-4 adalah untuk menghapuskan sisa-sisa PSR-0 dan pra-5.3 hari sepenuhnya, dan membolehkan struktur folder yang lebih ringkas. Dengan PSR-4, pokok folder di atas akan kelihatan seperti ini:
Menaik taraf PSR-0 bukan pilihan
Ini sangat penting-ini bermakna bahawa melaksanakan PSR-4, sambil membenarkan pakej yang lebih bersih, akan jauh lebih rumit untuk dilaksanakan. Kami memanggil autoloading berorientasikan pakej PSR-4, kerana ia memihak kepada kebersihan pakej sebelum kesederhanaan.
Matlamat yang dicadangkan adalah seperti berikut: Pastikan peraturan PSR-0 bahawa semua pakej mesti mengandungi sekurang-kurangnya dua tahap ruang nama (vendor dan pakej), pastikan kombo pakej vendor boleh memetakan ke mana-mana folder, dan membolehkan infix folder antara kombo pakej vendor dan seluruh nama kelas yang berkelayakan.
Ini bermakna kita akan dapat meletakkan kelas kita di mana -mana dalam kod pakej di mana ia masuk akal kepada kita sebagai manusia, dan masih menggunakannya dengan lancar dalam PHP tanpa menulis teknik pemuatan alternatif atau menggunakan pemuatan manual.
Selain itu, draf secara eksplisit menyatakan bahawa autoloader PSR-4 tidak boleh membuang pengecualian atau menimbulkan kesilapan semata-mata kerana autoloader berbilang boleh didaftarkan, dan jika seseorang gagal memuat kelas, yang lain harus diberi peluang untuk berbuat demikian-membuangnya- Kesalahan dan menghentikan aliran memecah keserasian ini. Sekiranya maklumat tambahan mengenai kegagalan diperlukan, seseorang harus menggunakan logger serasi PSR-3 atau cara sewenang-wenangnya.
seperti yang digambarkan dalam fail contoh, menggunakan autoloader PSR-4 untuk memuat kelas dari struktur berikut:
vendor/ vendor_name/ package_name/ src/ Vendor_Name/ Package_Name/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ Vendor_Name/ Package_Name/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
akan kelihatan seperti ini:
vendor/ vendor_name/ package_name/ src/ ClassName.php # Vendor_Name\Package_Name\ClassName tests/ ClassNameTest.php # Vendor_Name\Package_Name\ClassNameTest
di mana memanggil Foobarquxquux baru; akan cuba memuatkan dari direktori berdaftar pertama, sementara Foobarquxquuxtest baru; akan cuba memuatkan dari yang kedua.
Contoh ini juga menggambarkan penggunaan pelbagai folder setiap ruang nama tunggal.
Tidak ada peluru perak dalam autoloading. Setiap pendekatan membawa dengan sendirinya beberapa kebaikan dan keburukan-PSR-4 akan membolehkan struktur folder yang lebih mudah, tetapi akan menghalang kita daripada mengetahui jalan yang tepat dari kelas hanya dengan melihat nama yang berkelayakan sepenuhnya. Sebaliknya, PSR-0 adalah huru-hara pada cakera keras, tetapi menyokong pemaju yang terjebak pada masa lalu (pengguna underscore-in-class-name) dan membantu kita membezakan lokasi kelas hanya dengan melihat namanya.
Bagaimana perasaan anda tentang PSR-4? Marilah kita tahu dalam komen di bawah, atau nyatakan pendapat anda dalam salah satu daripada banyak perdebatan.
Sama ada cara-tidak ada keraguan autoloading berorientasikan pakej di sini untuk kekal. Jika tidak diterima secara rasmi sebagai standard, maka adat yang dilaksanakan oleh orang yang memerlukannya. Terserah kepada kami untuk menyertai perbincangan dan memperbaiki tanggapan yang cukup untuk mencapai keadaan formal ini.
Adakah PSR-0 ditutup? Ini bermakna bahawa walaupun ia masih berfungsi, tidak disyorkan untuk digunakan dalam projek baru. PSR-4 adalah standard yang disyorkan untuk autoloading dalam php.
. Selebihnya ruang nama kemudian dipetakan ke struktur subdirektori. Ini membolehkan pendekatan yang lebih fleksibel dan cekap untuk autoload. Perlu bersarang direktori yang mendalam, dan kecekapan yang lebih baik. Ia juga merupakan standard yang disyorkan untuk autoloading di PHP, menjadikannya pilihan yang baik untuk projek baru. Kepada PSR-4 melibatkan perubahan ruang nama dan direktori yang dipetakan. Dalam PSR-4, sebahagian daripada ruang nama boleh dipetakan ke mana-mana direktori, dan seluruh ruang nama boleh dipetakan ke struktur subdirektori. Ini mungkin memerlukan penstrukturan semula struktur direktori projek anda.
Atas ialah kandungan terperinci Pertempuran Autoloaders: PSR-0 vs PSR-4. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!