1 min read

PHP spl_autoload_register Kullanımı

PHP dilinde yaklaşık her uygulamada yer alan autoloader’ların en büyük problemi tüm sınıfların aynı anda yüklenmesi ve kullanılmayan bu çoğu sınıfın sistemde yük oluşturmasıdır. Yani sisteminizde örnek verecek olursak, ajax ile bir post işlemi yaparken neden mail sınıfınız include edilsin ki?

Bu durumu, örneği çoğaltabiliriz.. Framework’larde gördüğüm kadarıyla şu anda kullanılmayan sınıfların önüne geçmek için her controller yapısında ilgili sınıfı elle include ediyoruz. Yani bu da demek oluyor ki her kullanacağımız sınıfı tanımlıyoruz. Tabii hal böyle olunca her controller’da aynı sınıfı yazmak yada tanımlamak (adını siz koyun) projede illa ki bir yerde eksikliğe, kargaşaya neden olacaktır. Bu durumda size spl_autoload_register metotuyla tanıştırmak isterim. Bununla ilgili github hesabımda bir uygulama yayınladım. Linkini yazının sonunda paylaşacağım..

spl_autoload_register metotu bize normal __autoloader metotuna karşı olarak sadece sınıfı kullanmak istediğimiz sırada include edilme şansı verir. Yani kullanmak istediğiniz sınıf neyse sadece sınıfın bir metotunu çalıştırmak. Yapmanız gereken tek şey bu. Bunu yaptığınız sırada spl_autoload_register metotu sizin için sınıfını include edecektir.

Örnek olarak kullanım:

<?php

/**
 * Sınıfların include edecek metot.
 */
function autoload($className)
{
	$dir 		= __DIR__.'/classes/';
	$classPath 	= $dir.$className.'.php';

	include($classPath);
}
//Sınıfımızı arayıp bulacak olan metotu belirliyoruz.
spl_autoload_register('autoload');
?>

Bu örnekte basit bir fonksiyon ile sınıfımızı classes dizinin altında sınıfı include edecektir. İstenirse sabit olarak tanımlanan bazı metotlarıda include sırasında başlatabilirsiniz.

GitHub Örneğim: https://github.com/enesgur/autoloader

PHP.NET: http://www.php.net/manual/en/function.spl-autoload-register.php