Rumah  >  Artikel  >  rangka kerja php  >  Bagaimana untuk memahami pemuatan automatik ThinkPHP's Loader

Bagaimana untuk memahami pemuatan automatik ThinkPHP's Loader

WBOY
WBOYke hadapan
2021-12-20 14:06:381972semak imbas

Artikel ini membawakan anda pengetahuan tentang pemuatan automatik dalam thinkphp Ia terutamanya termasuk pengetahuan tentang pemuatan Komposer Saya harap ia akan membantu semua orang.

Bagaimana untuk memahami pemuatan automatik ThinkPHP's Loader1. 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

  • 1 -2 Komposer memuatkan

Sisipkan penerangan imej di siniBagaimana untuk memahami pemuatan automatik ThinkPHPs LoaderKelas 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.

Bagaimana untuk memahami pemuatan automatik ThinkPHPs LoaderBerikutan ini ialah laluan akar projek dan laluan komposer.

Sisipkan penerangan imej di sini

Bagaimana untuk memahami pemuatan automatik ThinkPHPs LoaderBermula 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

    ini

Berikut 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. Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Dengan itu, dapatkan secara langsung nilai atribut yang sepadan dalam kelas ComposerStaticInit30742487e00917c888d89ba216f165b9, iaitu dua nilai atribut dalam gambar di atas.

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

1-3 Daftar ruang nama

Fail masih kaedah daftar thinkphplibrarythinkLoader.php

Bagaimana untuk memahami pemuatan automatik ThinkPHPs LoaderDaftar 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,>Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loadermengesahkan kelas

Bagaimana untuk memahami pemuatan automatik ThinkPHPs LoaderSehingga ke tahap ini pendaftaran ruang nama telah selesai Seterusnya, mari kita kaji apakah ruang nama psr4.

1-4 Apakah itu Psr4Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

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 (< ;Sub ruang nama>)*Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Spesifikasi berikut berasal daripada dokumentasi PHP

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 Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

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

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Anda akhirnya akan sampai ke sana Kaedah addClassMap, dalam kaedah ini, hanya menyerahkan data fail classmap.php kepada $classMap, tiada penggunaan lain

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

1-6 Muatkan direktori lanjutkan secara automatik Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

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.

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Setakat ini Loader::register(); bahagian ini telah tamat, dan kemudian kami akan melihat secara mendalam pelaksanaan dalaman dan kes praktikal.

Bagaimana untuk memahami pemuatan automatik ThinkPHPs LoaderTerdapat empat atribut dalam kod sumber bacaan di atas. Mari kita susun secara ringkasnya

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader2 kelas

Bagaimana untuk memahami pemuatan automatik ThinkPHPs LoaderSisipkan 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

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Why It's thinkError ! Anda boleh kembali ke thinkphp/base.php dan lihat Apabila pemuatan automatik selesai, kelas pertama yang akan dilaksanakan ialah Ralat

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

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.

Bagaimana untuk memahami pemuatan automatik ThinkPHPs LoaderApabila 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

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

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

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Kelas thinkError akan dikembalikan. secara langsung Selepas laluan lengkap dikembalikan kepada pembolehubah fail autoload, huruf besar dan kecil bagi persekitaran menang dinilai sekali.

Bagaimana untuk memahami pemuatan automatik ThinkPHPs LoaderKemudian 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 untuk memahami pemuatan automatik ThinkPHPs LoaderBagaimana 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

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Dapatkan fail thinkError dahulu

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

dan kemudian pergi melalui Composer secara automatik memuatkan dua atribut untuk mendapatkan ruang nama Selepas menyambung fail thinkError.php

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

, 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

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Pada masa ini, perkenalkan fail Kaka.php

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

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!

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Sisipkan penerangan gambar di sini

Pada masa ini, kepentingan kod sumber diingatkan bahawa dalam fungsi daftar yang dimuatkan secara automatik, lanjutkan dimuatkan Direktori

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Sisipkan penerangan gambar di sini

Pada masa ini, tambah direktori kaka dan lawatinya terus

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Tak salah, keluar terus. Semuanya OK. Mari kita bincangkan tentang kaedah pemuatan takat

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

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

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Sisipkan penerangan gambar di sini

Selagi kelas yang ditakrifkan disertakan, ia akan disertakan autoload secara automatik memuatkan

dan juga akan memasuki kaedah findFile

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

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.

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Lihat data semasa mencetak kelas parameter dalam findFile

Anda boleh melihat kelas testKaka dengan jelas

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

Pada masa ini, cetak fail yang dikembalikan dalam atribut $fallbackDirsPsr4

Bagaimana untuk memahami pemuatan automatik ThinkPHPs Loader

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!

Kenyataan:
Artikel ini dikembalikan pada:juejin.im. Jika ada pelanggaran, sila hubungi admin@php.cn Padam