⊗ppOpNsCA 107 of 107 menu

PHP да ООП да класлар учун ўз функциянгизни автолойиҳалаш

Кўпинча, стандарт автолойиҳалаш сизни қониқтирмаслиги мумкин баъзи сабабларга кўра. Бундай ҳолларда ўз автолойиҳалашингизни яза оласиз.

Бунинг учун spl_autoload_register функциясига биринчи параметр сифатида сиз язган коллбэк-функцияни ўтказасиз. Бу функция ишга тушadi, қачон PHP юкланмаган классга мурожаатни аниқлаганида. Бу функциянинг параметрига исм фазоси билан класс номи тушади:

<?php spl_autoload_register(function($class) { // $class ўзгарувчисида исм фазоси билан класс номи бўлади }); ?>

Функциянинг вазифаси эса класс номи бўйича ушбу классни require орқали юклашни бажаришдир. Яъни биз бу функциянинг ичида класларни юклаш учун ўз қоидамизни, яъни ўз номлаш келишувимизни ёзишимиз керак.

Келинг, бирор ўз автолойиҳалашимизни ёзиб кўрамиз. Масалан, айтайлик, класс файлининг сайт илдизидан йўли ўхшаш бўлади исм фазосига, лекин белгилар регистрини сақлаб.

Яъни, агар бизда Core\Admin\PageController класси бўлса, унинг йўли Core/Admin/PageController.php бўлиши керак.

Кўриб turganingizdek, класс номини унинг фазоси билан ўзгартириш учун фақат \tарка варақа слешларни тўғри слешларга алмаштириш керак, класс номига esa \t.php қўшиш керак. Буни амалга оширамиз:

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

\tБирок, бизда файлга нисбий йўл hosil boʻladi \t(сайт илдизига нисбатан). Яхшироғи \tмутлақ йўлни ясаш, мана бу йўл билан:

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

\tЯна бир нуқса бор. Турли операцион тизимларда \tпапкалар бўйича йўл тўғри слеш билан \tбўлиши мумкин ва яна тескари слеш билан. Келинг, бизнинг кодимизни операцион тизимдан mustaqil qilaylik. Бунинг учун \tйўлларни ажратиш учун тўғри слеш ўрнига \tконстанта DIRECTORY_SEPARATOR дан foydalanamiz, \tу ўз ичига олади ҳозир ишлаётган операцион \tтизимимиз учун тўғри слешни. Якунда 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); }); ?>

\t\tМен яратган автолойиҳалаш функциясини sinab koʻring.

\t\tЎз автолойиҳалаш қоидангизни oʻylab toping \t\tва уни амалга оширинг.

Ўзбек
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeOʻzbekTiếng Việt
Биз веб-сайт ишлаши, таҳлил қилиш ва персоналлаштириш учун кукидан фойдаланамиз. Маълумотларни қайта ишлаш Махфийлик сиёсатига мувофиқ амалга оширилади.
ҳаммасини қабул қилиш мослаштириш рад этиш