⊗ppOpNsCA 107 of 107 menu

Fungsi Sendiri untuk Autoload Kelas dalam OOP dalam PHP

Sering kali autoload lalai mungkin tidak memuaskan anda atas sebab-sebab tertentu. Dalam kes sedemikian, anda boleh menulis autoload anda sendiri.

Untuk melakukan ini, ke fungsi spl_autoload_register perlu menghantar fungsi callback yang ditulis oleh anda sebagai parameter pertama. Fungsi ini akan dipanggil apabila PHP mengesan akses kepada kelas yang belum dimuat. Nama kelas dengan ruang nama akan dimasukkan ke dalam parameter fungsi ini:

<?php spl_autoload_register(function($class) { // dalam pembolehubah $class akan ada nama kelas dengan ruang nama }); ?>

Dan tanggungjawab fungsi adalah berdasarkan nama kelas untuk memuatkan kelas tersebut melalui require. Iaitu, di dalam fungsi ini kita perlu menetapkan peraturan kita sendiri untuk memuatkan kelas, iaitu persetujuan penamaan kita sendiri.

Mari kita tulis contoh autoload kami sendiri. Sebagai contoh, katakan kita bersetuju bahawa laluan ke fail kelas dari akar tapak web akan sama dengan ruang nama, tetapi dengan mengekalkan kes huruf.

Iaitu, jika kita mempunyai kelas Core\Admin\PageController, maka laluan kepadanya harus Core/Admin/PageController.php.

Seperti yang anda lihat, untuk menukar nama kelas dengan ruang namanya, anda hanya perlu menukar garis miring belakang kepada garis miring ke hadapan, dan kepada nama kelas tambahkan .php. Mari lakukan ini:

<?php spl_autoload_register(function($class) { $filename = str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Walau bagaimanapun, kita akan mendapat laluan relatif kepada fail (berbanding akar tapak web). Lebih baik buat laluan mutlak, seperti ini:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $filename = $root . '/' . str_replace('\\', '/', $class) . '.php'; require($filename); }); ?>

Ada satu lagi nuansa. Dalam sistem pengendalian yang berbeza laluan melalui folder mungkin mempunyai garis miring ke hadapan atau garis miring belakang. Mari jadikan kod kami bebas daripada sistem pengendalian. Untuk melakukan ini, gantikan garis miring ke hadapan untuk pemisah laluan dengan pemalar DIRECTORY_SEPARATOR, yang mengandungi garis miring yang betul untuk sistem pengendalian di mana skrip kami sedang berjalan. Hasilnya, kami mendapat kod berikut:

<?php spl_autoload_register(function($class) { $root = $_SERVER['DOCUMENT_ROOT']; $ds = DIRECTORY_SEPARATOR; $filename = $root . $ds . str_replace('\\', $ds, $class) . '.php'; require($filename); }); ?>

Uji fungsi autoload yang saya buat.

Cipta peraturan autoload anda sendiri dan laksanakannya.

Melayu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Kami menggunakan kuki untuk operasi laman web, analisis dan personalisasi. Pemprosesan data dijalankan mengikut Polisi Kerahsiaan.
terima semua tataletak tolak