Artikel ini membawakan anda pengetahuan tentang pemuatan automatik dalam thinkphp Ia terutamanya termasuk pengetahuan tentang pemuatan Komposer Saya harap ia akan membantu semua orang.
1. 1-1 Objektif Pembelajaran
Pemuatan automatik kelas
Dua cara pemuatan automatik kelas
spl_autoload_register mesti boleh menggunakan
untuk melaksanakan pemuatan automatik kelas fail tersuai
Sisipkan penerangan imej di siniKelas loader dimuatkan dahulu dalam base.php, dan kemudian dipanggil Daftar kaedah ini.
Datang ke thinkphplibrarythinkLoader.php dan terdapat kaedah daftar Dalam kaedah ini, kita mula-mula mempelajari titik pengetahuan pertama spl_autoload_register() dan bercakap tentang kehidupan masa lalu dan sekarang. penggunaan mudah spl_autoload_register , klik terus untuk melihat.Berikutan ini ialah laluan akar projek dan laluan komposer.
Sisipkan penerangan imej di siniBermula dari sini memuatkan fail komposer, prosesnya juga sangat mudah
Tentukan sama ada komposer ialah direktori
Tentukan sama ada autoload_static.php di bawah laluan ialah fail
Perkenalkan fail autoload_static.php
Kembalikan semua pengembalian Array kelas yang diisytiharkan
Dapatkan kelas terakhir ComposerStaticInit30742487e00917c888d89ba216f165b>
Static.>Kemudian anda boleh pergi ke vendorcomposerautoload_static.php fail untuk melihat kedua-dua atribut
iniBerikut ialah sekeping kod Dianggarkan bahawa sesetengah pelajar akan pergi sendiri::${$attr} = $composerClass::${$attr}; 'prefixLengthsPsr4', 'prefixDirsPsr4' , 'fallbackDirsPsr4', 'prefixesPsr0', 'fallbackDirsPsr0', 'classMap', 'fail', data ini, tambahkan tanda $ di lapisan luar.
Dengan itu, dapatkan secara langsung nilai atribut yang sepadan dalam kelas ComposerStaticInit30742487e00917c888d89ba216f165b9, iaitu dua nilai atribut dalam gambar di atas.1-3 Daftar ruang nama
Fail masih kaedah daftar thinkphplibrarythinkLoader.phpDaftar di sini Terdapat dua ruang arahan, fikir dan sifat. Kemudian anda akan memasukkan kaedah addNamespace
Dalam kaedah addNamespace, ruang Psr4 ditambah
Kemudian anda akan datang ke kaedah addPsr4, yang akan Kedua-dua ruang nama didaftarkan pada sifat $prefixLengthsPsr4 dan $prefixDirsPsr4 bagi kelas
ComposerStaticInit1e269472f484e157e90227b420ffca7a di atas,>mengesahkan kelas
Sehingga ke tahap ini pendaftaran ruang nama telah selesai Seterusnya, mari kita kaji apakah ruang nama psr4.1-4 Apakah itu Psr4
psr hanya difahami sebagai laluan fail dan spesifikasi yang berkaitan untuk memuatkan secara automatik yang sepadan classes , Pada masa ini TP5.1 menggunakan spesifikasi psr4
Kelas di sini merujuk kepada kelas, antara muka, struktur kelas super
Kelas yang lengkap memerlukan struktur berikut
Nama kelas yang lengkap mesti mempunyai ruang nama peringkat atas, Dikenali sebagai " ruang nama vendor"; Nama kelas lengkap boleh mempunyai satu atau lebih ruang kecil; Nama kelas lengkap mesti Mempunyai kelas akhir nama;
Skor bawah dalam mana-mana bahagian nama kelas lengkap tidak mempunyai makna istimewa;
Semua nama kelas mestilah peka huruf besar-besaran.
Berikut adalah contoh rasmi Jika anda boleh memahami spesifikasi psr ini, cuba fahami
1. - 5 Muatkan fail pemetaan perpustakaan kelas
Pada ketika ini, pasti akan timbul persoalan, mengapa tiada fail classmap.php di sini?
Jangan tergesa-gesa, jangan panik, mula-mula laksanakan php think optimize:autoload untuk mengeluarkan fail Anda akhirnya akan sampai ke sana Kaedah addClassMap, dalam kaedah ini, hanya menyerahkan data fail classmap.php kepada $classMap, tiada penggunaan lain1-6 Muatkan direktori lanjutkan secara automatik
lanjutkan Direktori ini digunakan oleh semua orang yang telah menggunakan rangka kerja TP tersuai Fail perpustakaan kelas boleh disimpan dalam direktori ini. Seperti yang anda lihat daripada gambar di bawah, kaedah addAutoLoadDir digunakan untuk memuatkan
Dalam kaedah tersebut, laluan lanjutan hanya diberikan kepada $fallbackDirsPsr4 harta ini. Setakat ini Loader::register(); bahagian ini telah tamat, dan kemudian kami akan melihat secara mendalam pelaksanaan dalaman dan kes praktikal.Terdapat empat atribut dalam kod sumber bacaan di atas. Mari kita susun secara ringkasnya
2 kelas
Sisipkan penerangan gambar di siniBaru mula menghuraikan kod sumber di sini Terdapat fungsi spl_autoload_register
Apabila kelas yang akan digunakan tidak diperkenalkan, fungsi ini akan dicetuskan sebelum PHP melaporkan ralat Nama kelas yang tidak ditentukan akan dihantar sebagai parameter dan fikir akan dilaksanakan secara langsung . \Loader::autoload kaedah ini
Kelas pertama yang dipunggah selepas titik putus ialah thinkError Why It's thinkError ! Anda boleh kembali ke thinkphp/base.php dan lihat Apabila pemuatan automatik selesai, kelas pertama yang akan dilaksanakan ialah Ralat ujian. Ralat ini ditukar kepada Kaka, mencetaknya, dan kelas ditukar kepada Kaka. Pada ketika ini semua orang mempunyai pemahaman tertentu tentang mekanisme pemuatan automatik kelas ini.Apabila kelas yang digunakan tidak diperkenalkan, kelas ini akan dihantar sebagai parameter kepada kaedah autoload thinkphp/library/think/Loader.php.
Mari ke sini dan lihat kaedah autoload Mulakan dengan kaedah findFile dan alih keluar yang tidak digunakan Kelas dihantar ke kaedah ini. Dalam kaedah findFile, fail yang dipetakan oleh kelas thinkError akan dikembalikan terus daripada atribut classMap Kelas thinkError akan dikembalikan. secara langsung Selepas laluan lengkap dikembalikan kepada pembolehubah fail autoload, huruf besar dan kecil bagi persekitaran menang dinilai sekali.Kemudian hanya gunakan include untuk memperkenalkan fail sehingga ia kembali.
Sehingga di sini ialah analisis pemuatan automatik lengkap kelas.
Walaupun ia berakhir di sini, saya masih perlu menyebut atribut $classMap Atribut ini berdasarkan fail classmap.php Penjanaan fail ini juga diperlukan. Dihasilkan dengan melaksanakan perintah php think optimize:autoload.Bagaimana program dijalankan apabila fail ini tidak dijana!
Semua proses sebelumnya adalah sama, cuma findFile sahaja yang berbeza.
Pada masa ini kod pasti tidak akan melalui classMap
Dapatkan fail thinkError dahulu
dan kemudian pergi melalui Composer secara automatik memuatkan dua atribut untuk mendapatkan ruang nama Selepas menyambung fail thinkError.php
, hasil akhir yang dikembalikan juga ialah fail D: phpstudy_proWWWThinkPHPSSumberCodeAnalysisthinkphplibrarythinkError.php.
Kod di sini perlu dibaca dengan teliti. Pemuatan automatik kelas
tamat sepenuhnya di sini.
3. Bagaimana untuk melaksanakan pemuatan automatik kelas dengan fail tersuai
Mula-mula buat folder kaka
Pada masa ini, perkenalkan fail Kaka.php
ke dalam indeks pengawal untuk akses terus Pada masa ini, kelas ini pasti akan melaporkan ralat , jadi apa yang perlu kami lakukan hanya klik dan anda boleh mengaksesnya secara langsung!
Sisipkan penerangan gambar di sini
Pada masa ini, kepentingan kod sumber diingatkan bahawa dalam fungsi daftar yang dimuatkan secara automatik, lanjutkan dimuatkan Direktori
Sisipkan penerangan gambar di sini
Pada masa ini, tambah direktori kaka dan lawatinya terus
Tak salah, keluar terus. Semuanya OK. Mari kita bincangkan tentang kaedah pemuatan takat
Apabila saya bercakap tentang mendaftarkan direktori perpustakaan kelas pemuatan automatik sebelum ini, saya hanya menjelaskan bahawa saya hanya menyimpan laluan ke atribut $fallbackDirsPsr4, tetapi tidak ada Untuk menghuraikan, langkah seterusnya adalah untuk menerangkannya.
Membaca kod sumber hanya boleh dilakukan dengan melaksanakannya dan kemudian melihatnya
Sisipkan penerangan gambar di sini
Selagi kelas yang ditakrifkan disertakan, ia akan disertakan autoload secara automatik memuatkan
dan juga akan memasuki kaedah findFile
Anda boleh melihat kod ini dalam kaedah findFile. Adakah atribut ini sangat istimewa? Familiar, ia ditambahkan pada atribut $fallbackDirsPsr4 apabila direktori extend dimuatkan secara automatik.
Lihat data semasa mencetak kelas parameter dalam findFile
Anda boleh melihat kelas testKaka dengan jelas
Pada masa ini, cetak fail yang dikembalikan dalam atribut $fallbackDirsPsr4
Kemudian gunakan __include_file untuk terus memasukkanD:phpstudy_proWWWThinkPHPSourkalysis php yang kami tentukan.
Bagaimanakah fail tersuai di atas merealisasikan pemuatan automatik kelas, dan ia juga merupakan kaedah pemuatan lanjutan
(Pembelajaran yang disyorkan: thinkphp5)
Atas ialah kandungan terperinci Bagaimana untuk memahami pemuatan automatik ThinkPHP's Loader. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!