9 Ekim 2009Php __autoload fonksiyonu
Php ile classlara değinmeden önce OOP nedir diye bir açıklama gereği hissetmiyorum
. Direk konuya dalmak istiyorum zira herkes bi yerde mutlaka OOP nedir diye okumuşlardır. Okumayanlar içinde buyrun link burada.
Sınıflara ilk __autoload fonksiyondan başlayalım. Bu metot sınıflarımızı uygulamamıza otomatik olarak yükleyecektir böylece şu classı yüklemişmiydim yüklememişmiydim derdinden kurtuluyoruz.
Metotu bir örnekle açıklayıp bitirelim. Öncelikle aşağıdaki bir dizin içinde index.php ve bir de class adında dizin yaratalım ve class içerisine de a.class.php ve b.class.php diye iki adet php dosyası yaratalım.
Burdaki önemli nokta class dosyalarımıza gelişi güzel bir isim değilde bir düzen içerisinde isim vermektir. Çünkü fonksiyon belli bir düzeneğe göre eklemee yapacaktır. örneğin a.class.php dosyasını yüklerken class.b.php dosyasını yüklemeyecektir az sonra yazacağımız fonksiyon da bu düzeni siz kendinize göre oluşturabilirsiniz.
Evet dosyalarımızı oluşturduğumuza göre autoload fonksiyonumuzu yazalım.
autoload.php:
< ?php function __autoload($classname) { $include = "class/{$classname}.class.php"; if (file_exists($include)) { include_once($include); } else { exit($classname.' sınıfı yüklenemedi.'); } } ?>
Yukarıdaki autoload fonksiyonunu sayfamızın üstüne include ediyoruz. Daha sonra ise class dizinindeki herhangi bir sınıfı başlatmak istediğimiz de autoload devreye girerek sınıfı yüklüyor. Eğer hiç bir sınıf başlatmassanız sayfada hiç bir sınıfı dahil etmemiş olursunuz.
class/a.class.php:
< ?php class a { public function __construct() { echo 'Merhaba ben a sınıfıyım'; } } ?>
class/b.class.php:
< ?php class b { public function __construct() { echo 'Merhaba ben b sınıfıyım'; } } ?>
Yukarıda autoload fonksiyonu ile yüklenmesini istediğimiz sınıfları yazdık ve class dizinine sınıfadi.class.php şeklinde kaydettik.
Şimdide en son olarak index.php mizi yazalım ve örneğimizin çalışır halini görelim.
index.php:
< ?php # Sayfa tipini ve karakter setini belirtelim. header('Content-Type: text/html; charset=utf-8'); # Autoload fonksiyonumuzu dahil edelim. include_once('autoload.php'); $a = new a; echo '<br>'; $b = new b; ?>
Görüldüğü üzere __autoload fonksiyonu biz tek tek belirtmemize gerek kalmadan tüm sınıfları sayfamıza dahil etti. Burdan şu anlaşılmasın içinde 100 tane dosya varsa hepsini dahil etmiyor sayfanızda hangi sınıfı başlatıyorsanız o sınıfı dahil ediyor sadece.
Yazıyı noktalarken soru ve merak ettikleriniz için yorumları kullanabilirsiniz.



Selamlar,
Yusuf Abi Benim Burada Anlamadığım Nokta. __autoload() Metoduna Parametre Göndermiyoruz . Sistem Nasıl Oluyorda Fatal Error Vermiyor ve Dikkat Ettim
$a = new a(); // parantezler yok
Bunların Hepsi __autoload’in Özelliğimidir.
autoload tanımlanmış dosyada bir classı çalıştırmak istediğin zaman autoload çağrılmış oluyor tıpki normal bir fonksiyonu çağırır gibi.
sınıfları başlatırken eğer sınıfa parametre gönderme gerekmiyorsa () yapmayabilirsin. Bunun autoload ile alakası yok.
Büyük adamsın yusuf KOÇ
Yine faydalı bir yazı teşekkürler.
Yalnız ” $include = “class/{$classname}.class.php”;
” şurdaki “{” parantezler ne işe yarıyor?
ordaki {} ile değişkenin hemen ardından herhangi bir string ile birleştirebiliyoruz.
@yusuf peki bu codeigniter ve diger frameworklarda oldugu gibi
class dosya extends Controller {
yapılıyor ya..bu da sanırım autoload bir ornek.bunu nasıl yapıyolar