Otomatik yüklenen sınıflar tek bir yerden kullanılacak sınıfları yüklemeye olanak sağlar. Otomatik yüklenen sınıflarda, kullanılmayan sınıfların dosyaları yüklenmezler (include edilmez), bu yüzden etkili bir yoldur. Ancak her bir sınıfı tek tek yüklemek performans açısından daha etkilidir ama bir süre sonra kod karma karışık bir hale dönünce keşke dememek lazım.
Nasıl?
Otomatik yükleme için spl_autoload_register() kullanmak mantıklıdır. Öncelikle yüklemek istediğimiz sınıfları gösteren bir fonksiyon yazıyoruz.
function yukleyici($classAdi) {
include_once($classAdi.".php");
}
Bu fonksiyona verdiğimiz
class adı, ismiyle aynı olan dosyayı yükler. Yani Post
isminde bir classımız varsa Post.php dosyasını yüklemeye çalışır. Şimdi bu yukleyici yi kaydediyoruz.
spl_autoload_register('yukleyici');
Daha sonra sınıfımızı çağırıyoruz ve çağırdığımız zaman dosyamız otomatik olarak yükleniyor. Yani;
function yukleyici($classAdi) {
include_once($classAdi.".php");
}
spl_autoload_register('yukleyici');
new Post();
Dikkat ederseniz hiç bir dosyayı include etmedik sadece include edici fonksiyonu belirledik ve herşey otomatik gerçekleşti. şimdi
PSR-0 uyumlu yükleyicimizi kullanalım:
function yukleyici($classAdi)
{
$classAdi = ltrim($classAdi, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strrpos($classAdi, '\\')) {
$namespace = substr($classAdi, 0, $lastNsPos);
$classAdi = substr($classAdi, $lastNsPos + 1);
$dosyaAdi = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$dosyaAdi .= str_replace('_', DIRECTORY_SEPARATOR, $classAdi) . '.php';
require $dosyaAdi;
}
spl_autoload_register('yukleyici');
Artık tüm kodlarınızı PSR-0 uyumlu yazarsanız hiçbirşeyi include etmenize gerek kalmayacak. (PSR-0 hakkında:
http://www.cangelis.com/kodlama-stilleri-psr-0/) Şuraya da bir göz atabilirsiniz: https://gist.github.com/jwage/221634