Otomatik Yüklenen Sınıflar (Auto-loading classes)

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  

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax