⊗ppOpNsCA 107 of 107 menu

Դասերի ինքնաբեռնման սեփական ֆունկցիան PHP-ի ՕՕՊ-ում

Հաճախ լռելյայն ինքնաբեռնումը կարող է ձեզ չբավարարել ինչ-ինչ պատճառներով: Այդ դեպքում կարող եք գրել ձեր սեփական ինքնաբեռնումը:

Դրա համար spl_autoload_register ֆունկցիային որպես առաջին պարամետր պետք է փոխանցել ձեր կողմից գրված ֆունկցիա-կոլբեքը: Այս ֆունկցիան կկանչվի, երբ PHP-ն հայտնաբերի դեռևս չբեռնված դասի հղում: Այս ֆունկցիայի պարամետրին կհասնի դասի անունը namespace-ով:

<?php spl_autoload_register(function($class) { // $class փոփոխականում կլինի դասի անունը namespace-ով }); ?>

Իսկ ֆունկցիայի պարտականությունը կլինի ըստ դասի անվան կատարել այդ դասի բեռնումը require-ի միջոցով: Այսինքն՝ այս ֆունկցիայի ներսում մենք պետք է գրենք դասերի բեռնման մեր սեփական կանոնը, այսինքն անվանման մեր սեփական համաձայնեցումը:

Եկեք գրենք մեր ինքնաբեռնման ինչ-որ օրինակ: Ենթադրենք, օրինակ, մենք ասում ենք, որ դասի ֆայլի ճանապարհը կայքի արմատից կլինի նույնը, ինչ namespace-ը, բայց սիմվոլների ռեգիստրը պահպանելով:

Այսինքն, եթե մենք ունենք Core\Admin\PageController դասը, ապա դրա ճանապարհը պետք է լինի Core/Admin/PageController.php:

Ինչպես տեսնում եք, դասի անունը նրա namespace-ով վերափոխելու համար պետք է պարզապես հակադարձ բութերիթները փոխարինել ուղիղներով, իսկ դասի անվանը ավելացնել .php: Եկեք դա անենք.

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

Սակայն մեզ մոտ կստացվի ֆայլի հարաբերական ճանապարհ (կայքի արմատի նկատմամբ): Ավելի լավ է կատարել բացարձակ ճանապարհ, ահա այսպես.

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

Կա ևս մեկ նրբերանգ: Տարբեր օպերացիոն համակարգերում պանակների միջով ճանապարհը կարող է լինել ուղիղ բութերիթով կամ հակադարձով: Եկեք մեր կոդը դարձնենք անկախ օպերացիոն համակարգից: Դրա համար ճանապարհները բաժանելու ուղիղ բութերիթի փոխարեն կդնենք DIRECTORY_SEPARATOR հաստատունը, որը պարունակում է ճիշտ բութերիթը այն օպերացիոն համակարգի, որում այս պահին գործարկվում է մեր սկրիպտը: Արդյունքում կստանանք հետևյալ կոդը.

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

Փորձարկեք իմ ստեղծած ինքնաբեռնման ֆունկցիան:

Հնարեք ձեր սեփական ինքնաբեռնման կանոնը և իրականացրեք այն:

Հայերեն
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Մենք օգտագործում ենք cookie-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել