⊗ppOpNsCA 107 of 107 menu

PHP'de OOP'de Sınıflar için Özel Otomatik Yükleme Fonksiyonu

Genellikle varsayılan otomatik yükleme sizi bazı nedenlerden dolayı memnun etmeyebilir. Bu gibi durumlarda kendi otomatik yüklemenizi yazabilirsiniz.

Bunun için, spl_autoload_register fonksiyonuna ilk parametre olarak yazdığınız geri çağırım fonksiyonunu iletmeniz gerekir. Bu fonksiyon, PHP yüklenmemiş bir sınıfa erişim tespit ettiğinde çağrılacaktır. Bu fonksiyonun parametresine isim alanı ile birlikte sınıf adı gelecektir:

<?php spl_autoload_register(function($class) { // $class değişkeninde isim alanı ile birlikte sınıf adı olacak }); ?>

Ve fonksiyonun görevi, sınıf adına göre bu sınıfı require ile yüklemektir. Yani bu fonksiyonun içinde sınıf yükleme için kendi kuralımızı, yani kendi isimlendirme anlaşmamızı yazmalıyız.

Hadi bir örnek kendi otomatik yükleme fonksiyonumuzu yazalım. Örneğin, diyelim ki sınıf dosyasının site kökünden itibaren yolu, isim alanı ile aynı olacak, ancak karakterlerin büyük/küçük harf durumu korunacak.

Yani, eğer Core\Admin\PageController sınıfımız varsa, bunun yolu Core/Admin/PageController.php olmalıdır.

Gördüğünüz gibi, sınıf adını ve onun isim alanını dönüştürmek için sadece ters eğik çizgileri düz eğik çizgilerle değiştirmemiz, ve sınıf adına .php eklememiz gerekiyor. Bunu yapalım:

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

Ancak, dosya yolu için göreli bir yol elde edeceğiz (site köküne göre). Daha iyisi mutlak bir yol yapmaktır, işte şöyle:

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

Bir başka nüans daha var. Farklı işletim sistemlerinde klasör yolu düz eğik çizgi veya ters eğik çizgi ile olabilir. Kodumuzu işletim sisteminden bağımsız hale getirelim. Bunun için, yol ayırıcı olarak düz eğik çizgi yerine, içinde betiğimizin şu anda çalıştığı işletim sisteminin doğru eğik çizgisini barındıran DIRECTORY_SEPARATOR sabitini kullanacağız. Sonuçta aşağıdaki kodu elde ederiz:

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

Oluşturduğum otomatik yükleme fonksiyonunu test edin.

Kendi otomatik yükleme kuralınızı bulun ve uygulayın.

Türkçe
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenЎзбекOʻzbekTiếng Việt
Web sitesinin çalışması, analiz ve kişiselleştirme için çerezleri kullanıyoruz. Veri işleme, Gizlilik Politikası'na uygun olarak gerçekleşir.
tümünü kabul et özelleştir reddet