PHP OOP autoload

Kullanılan sınıfların dosyaya otomatik olarak yüklenmesi için kullanılan __autoload fonksiyonu ile ilgili bilgiler yer almaktadır.

PHP OOP autoload nedir?

OOP ile yazılım geliştirirken birden fazla sınıf ile çalışılır.

Farklı dosyalar içinde tutulan dosyaların projeye dahil edilmesi gerekir.

Bu işlem PHP içindeki require veya include türevleri ile yapılabilir.

Ancak gereğinden fazla sınıf olduğunda bu işlem zorlaşabilir.

Bu durumda PHP içinde bulunan __autoload fonksiyonu kullanılabilir.

<?php

$elma = new Elma();

?>

Örnekteki komutlar çalıştırıldığında PHP, sınıf olmadığından hata verecektir.

Ancak PHP hata vermeden önce son olarak dosya içinde bulunan __autoload fonksiyonunu çalıştırır.

Fonksiyon parametre olarak sınıf adını alır.

<?php

function __autoload($sinifAdi) {
  echo $sinifAdi . " sınıf kullanılıyor.";
}

$elma = new Elma();

?>

PHP’nin bu özelliğinde yararlanarak sınıf ismine göre hazırlanmış dosyalar projeye dahil edilebilir.

<?php

function __autoload($sinifAdi) {
  $sinifYolu = $sinifAdi . ".php";
  if (is_readable($sinifYolu)) {
    require_once $sinifYolu;
  } else {
    echo "Sınıfa ait dosya bulunamadı.";
  }
}

$elma = new Elma();
$armut = new Armut();
$karpuz = new Karpuz();

?>

Burada dikkat edilmesi gereken dosyaların sınıf adına göre düzenlenmiş olmasıdır.

Dosyalar farklı klasör içindeyse fonksiyonda düzenleme yapılması gerekebilir.

<?php

function __autoload($sinifAdi) {
  $sinifYolu = "sinif" . DIRECTORY_SEPARATOR . $sinifAdi . ".php";
  if (is_readable($sinifYolu)) {
    require_once $sinifYolu;
  } else {
    echo "Sınıfa ait dosya bulunamadı.";
  }
}

$elma = new Elma();
$armut = new Armut();
$karpuz = new Karpuz();

?>

Yazılan sınıflar işlevlerine göre farklı klasörlere ayrılabilir.

Bu durumda fonksiyonun tekrar düzenlenmesi gerekir.

Ancak bir fonksiyona gereğinden fazla görev yüklemek iyi olmayabilir.

Bu durumda özel sınıf yükleme fonksiyonu tanımlamak için spl_autoload_register fonksiyonu kullanılabilir.

Fonksiyon parametre olarak aldığı fonksiyona __autoload işlevi görevini verir.

Böylece farklı klasörde bulunan sınıflar için farklı fonksiyon tanımlanmış olur.

<?php

function meyveleriYukle($sinifAdi) {
  $sinifYolu = "meyve" . DIRECTORY_SEPARATOR . $sinifAdi . ".php";
  if (is_readable($sinifYolu)) {
    require_once $sinifYolu;
  }
}

function sebzeleriYukle($sinifAdi) {
  $sinifYolu = "sebze" . DIRECTORY_SEPARATOR . $sinifAdi . ".php";
  if (is_readable($sinifYolu)) {
    require_once $sinifYolu;
  }
}

spl_autoload_register('meyveleriYukle');
$elma = new Elma();
$armut = new Armut();
$karpuz = new Karpuz();

spl_autoload_register('sebzeleriYukle');
$domates = new Domates();
$patates = new Patates();
$salata = new Salata();

?>

Büyük bir sistem için otomatik sınıf yükleme işlemini tek bir dosya içinde spl_autoload_register fonksiyonu ile yapmak faydalı olacaktır.

PHP OOP Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!