⊗ppOpNsCA 107 of 107 menu

PHP-də OOP-də siniflər üçün avtomatik yükləmə funksiyasının yaradılması

Tez-tez standart avtomatik yükləmə müəyyən səbəblərə görə sizi qane etməyə bilər. Belə bir halda öz avtomatik yükləmə funksiyanızı yaza bilərsiniz.

Bunun üçün spl_autoload_register funksiyasına ilk parametr kimi yazdığınız callback funksiyasını ötürməlisiniz. Bu funksiya PHP yüklənməmiş sinifə müraciət aşkar etdikdə çağırılacaq. Bu funksiyanın parametrinə ad sahəsi olan sinfin adı düşəcək:

<?php spl_autoload_register(function($class) { // $class dəyişənində ad sahəsi olan sinfin adı olacaq }); ?>

Funksiyanın vəzifəsi isə sinfin adına əsasən həmin sinfi require ilə yükləməkdir. Yəni bu funksiyanın daxilində biz siniflərin yüklənməsi üçün öz qaydamızı, başqa sözlə öz adlandırma konvensiyamızı təyin etməliyik.

Gəlin öz avtomatik yükləməmiz üçün bir nümunə yazaq. Məsələn, fərz edək ki, sinif faylına olan yol saytın kökündən ad sahəsi ilə eyni olacaq, lakin simvolların registri saxlanılacaq.

Yəni, əgər bizim Core\Admin\PageController sinfimiz varsa, onda ona olan yol Core/Admin/PageController.php olmalıdır.

Gördüyünüz kimi, sinfin adını onun ad sahəsi ilə çevirmək üçün əks sləşları düz sləşlarla dəyişmək və sinfin adına .php əlavə etmək kifayətdir. Gəlin bunu edək:

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

Lakin, bizim fayla nisbi yol (saytın kökünə nisbətən) alınacaq. Absolyut yol etmək daha yaxşıdır, belə:

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

Başqa bir nüans da var. Müxtəlif əməliyyat sistemlərində qovluqlar arası yol düz sləş və ya əks sləş ilə ola bilər. Gəlin kodumuzu əməliyyat sistemindən asılı olmayan edək. Bunun üçün yol ayırıcısı kimi düz sləş yerinə, skriptimizin hazırda işə salındığı əməliyyat sisteminin düzgün sləşini ehtiva edən DIRECTORY_SEPARATOR sabitindən istifadə edəcəyik. Nəticədə aşağıdakı kodu alarıq:

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

Yaratdığım avtomatik yükləmə funksiyasını sınayın.

Öz avtomatik yükləmə qaydanızı düşünün və onu reallaşdırın.

Azərbaycan
AfrikaansБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Biz saytin işi, analitika və fərdiləşdirmə üçün cookie istifadə edirik. Məlumatların emalı Məxfilik Siyasəti əsasında həyata keçirilir.
hamısını qəbul et konfiqurasiya et rədd et