Merhaba arkadaşlar,
Bir önceki yazımızda örnek bir sınıf oluşturup bu sınıfımızı sayfaya include etmiştik. Peki 50-60 tane sınıfımız olmuş olsaydı her sınıf için tek tek include mi edecektik ? Tabi ki de hayır 🙂 Zaten bunu elle yapmış olsaydık vay halimize. Peki bunun için ne yapabiliriz. Php oop dersleri setimizin bu yazısında PHP‘nin bize sunmuş olduğu __autoload fonksiyonunu kullanarak bu soruna kökten çözüm getireceğiz.
Oop mimarisinde genel olarak sınıflar ayrı bir klasörde tutulur. Örneğin classes, class, lib ve library gibi. Ben genelde library adında bir klasör oluşturup onun içinde tutuyorum.
Lafı fazla uzatmadan konumuza dönelim 🙂 Library adında bir klasörünüz var ve siz sınıflarınızı bu klasörde tutuyorsunuz diyelim. 40-50 tane sınıf yazdınız ve tek tek yüklemek istemiyorsunuz. O halde sizi şöyle alayım 🙂
<?php function __autoload($class){ $file = 'library/'.$class.'.php'; if(file_exists($file)){ require_once($file); }else{ echo "sınıf bulunamadı"; } } ?>
Şeklinde kullanabilirsiniz. Burada klasör adresinize dikkat etmelisiniz.
Peki 50-60 tane dosyayı her seferinde yüklemek sistemi yavaşlatmaz mı ? Tabi ki yavaşlatır. __autoload fonksiyonu yeni bir sınıf başlatıldığı zaman çalışır. Şöyle ki New Session(); diyerek yeni bir sınıf başlattığınızda yalnızca library klasörünüzde bulunan session.php dosyası yüklenmiş olur. Yani her seferinde tüm dosyaları yüklemez. Böylelikle hem performans sağlamış oluruz hemde yeni bir sınıf yazdığımızda elle eklemekden kurtulmuş oluruz.
Burada dikkat etmemiz gereken bir diğer konuda sınıf adıyla dosya adının aynı olması. Mesela oop.php adında bir dosya oluşturduk içine de class OopDersleri diyerek OopDersleri adında bir sınıf oluşturduk diyelim. New OopDersleri() diye sınıfımızı başlattığımızda __autoload fonskiyonu çalışacak ve library klasörü altında OopDersleri.php dosyasını arayacaktır. Öyle bir dosya olmadığı için de doğal olarak else kısmında yazdığımız hatayı verecektir. Bu kısmı aklımızdan çıkarmıyoruz 🙂
Peki bir sınıfı başlattık ancak sadece belirli yerlerde kullanıyoruz. Mesela kategoriler sınıfımızı sistemimiz başlarken otomatik olarak başlattık. Yazılar kısmında işlem yapıyoruz diyelim. Yazılar kısmında çalışırken kategoriler sınıfına ihtiyacımız yok. PHP‘de kullanılmayan sınıfların otomatik olarak yüklenmesinin önüne geçmek için spl_autoload_register fonksiyonu kullanılır. Frameworklerde ve oop uygulamalarında genel olarak bu fonksiyonumuz autoloader’ların altına eklenir. Biz de standartlara uyarak kodumuzu şu şekilde değiştiriyoruz.
<?php function __autoload($class){ $file = 'library/'.$class.'.php'; if(file_exists($file)){ require_once($file); }else{ echo "sınıf bulunamadı"; } } spl_autoload_register('__autoload'); ?>
Bu şekilde daha sağlıklı bir kullanım elde etmiş oluruz. Sistemimizde gereksiz yüklerden kurtulmuş olur. Bir sonraki php oop dersleri yazımızda görüşmek üzere kendinize iyi bakın 🙂
İlk Yorumu Siz Yapın