⊗ppOpNsCA 107 of 107 menu

PHP OOPda Klasslar avtomatik yuklash uchun shaxsiy funksiya

Ko'pincha standart avtomatik yuklash sizni ba'zi sabablarga ko'ra qoniqtirmasligi mumkin. Bunday holatda o'zingizning avtomatik yuklash funksiyangizni yozishingiz mumkin.

Buning uchun spl_autoload_register funksiyasiga birinchi parametr sifatida siz yozgan callback funksiyani uzatish kerak. Bu funksiya chaqiriladi, qachonki PHP yuklanmagan klassga murojaat qilganini aniqlaganda. Ushbu funksiyaning parametriga nomlar fazosi bilan klass nomi tushadi:

<?php spl_autoload_register(function($class) { // $class o'zgaruvchisida nomlar fazosi bilan klass nomi bo'ladi }); ?>

Funksiyaning vazifasi esa klass nomi bo'yicha ushbu klassni require orqali yuklashni bajarishdir. Ya'ni bu funksiya ichida biz klasslarni yuklash uchun o'zimizning qoidamizni, ya'ni o'zimizning nomlash kelishuvimizni belgilashimiz kerak.

Keling, o'zimizning avtomatik yuklashimizning misolini yozaylik. Masalan, faraz qilaylik, biz klass fayliga bo'lgan yo'l sayt ildizidan nomlar fazosi bilan bir xil bo'lishini, lekin belgilar registri saqlangan holda bo'lishini talab qilamiz.

Ya'ni, agar bizda Core\Admin\PageController klassi bo'lsa, unga bo'lgan yo'l Core/Admin/PageController.php bo'lishi kerak.

Ko'rib turganingizdek, klass nomini uning fazosi bilan o'zgartirish uchun shunchaki teskari chiziqlarni to'g'ri chiziqlarga almashtirish, klass nomiga esa .php qo'shish kerak. Buni amalga oshiramiz:

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

Biroq, bizda faylga nisbiy yo'l (sayt ildiziga nisbatan) hosil bo'ladi. Mutlaq yo'l qilish yaxshiroq, mana buni qanday qilish mumkin:

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

Yana bir nuans bor. Turli operatsion tizimlarda papkalar bo'yicha yo'l to'g'ri chiziqcha yoki teskari chiziqcha bilan bo'lishi mumkin. Keling, kodimizni operatsion tizimdan mustaqil qilaylik. Buning uchun yo'llarni ajratishda to'g'ri chiziqcha o'rniga hozirda skriptimiz ishlayotgan operatsion tizimning to'g'ri chiziqchasini o'z ichiga olgan DIRECTORY_SEPARATOR konstantasidan foydalanamiz. Natijada quyidagi kodni olamiz:

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

Men yaratgan avtomatik yuklash funksiyasini sinab ko'ring.

O'zingizning avtomatik yuklash qoidangizni o'ylab toping va uni amalga oshiring.

Oʻzbek
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекTiếng Việt
Biz sayt ishlashi, tahlil qilish va shaxsiylashtirish uchun cookie-fayllardan foydalanamiz. Ma'lumotlarni qayta ishlash Maxfiylik siyosatiga muvofiq amalga oshiriladi.
hammasini qabul qilish sozlash rad etish