Bir çok yazılım dilinde bir projenin obez, karmaşık ve local kalmasını engellemek için OOP (Nesne Tabanl Programlama) kullanılmaktadır.
PHP 5.3 den sonra dahil olunun OOP ile frameworkler oluşturulmuştur. Bu sayede zaman kaybetmeden aynı mimaride birçok yazılım standardı yakalanmış durumdadır. Yapılan projelere bir eklenti veya modül gibi yazılımlara ek sınıflar oluşturulabilmektedir. Bunlara en iyi örnekler ise frameworklerdir. Ortak standartlara sahip olan frameworklerde otomatik sınıf yükleme özellik kullanılmaktadır. Bunu sınıfi içerisinde __autoload sihirli metodu sağlamaktadır. Tabi bu sihirli metodunda bazen gereksiz sınıfları yüklemesi ve sayfa açılımını geciktirmesi gibi sorunlar mevcuttur. Bu olumsuz durumu engellemek için aşağıda oluşturduğumuz fonksiyon kullanılmaktadır. Sizler hiçbir dosyayı çağırmıyorsunu Framework mimarisinde ;
———–\index.php
———–\App\controller\controller.php
———–\App\Model\model.php
şeklinde veya kendi oluşturmuş olduğunuz bir active directory de
otomatik dosya yükleme yapabilirsiniz. Aşağıda autoFile fonksiyonunu oluşturduk ve spl_autoload_register metodunda çağırdık. Sonra
sayfamızda kullanmak istediğniz sınıfların namespace’lerini çağırdık. Bu sayede ilgili sınıflar sayfamıza kendiliğinden çağırıldı.
Öncelikli olarak ana dizine index.php oluşturalım ve içerisinde autoFile funksiyonumuzun olduğu içeriği yazalım.
index.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <?php header('Content-Type: text/html; charset=utf-8'); //Sayfa karakter setini belirledik function autoFile($class){ //autoload fonksiyonumuzu çağırdık $dp=DIRECTORY_SEPARATOR; // "\" ters slash işaretini aldık $file=__DIR__. $dp.'App'.$dp.$class.'.php';//classın dizinini belirledik if(file_exists($file)):// dosyanın var olup olmadınığını control ettik; require_once($file);//İlgili sınıfı çağırdık else: exit("İligili dosya yülenemedi.");// Dosya bulunamazsa ölümcül hata verdik. endif; } spl_autoload_register("autoFile");// autoFile fonksiyonumuzu sayfada çağırlan sınıfları use model\model; use controller\controller; $classModel=new model(); $classModel->test(); $classController=new controller(); $classController->test(); ?> |
Daha sonra App klasörü icerisine yine controller klasörü oluşturup controller.php sayfasına aşağıdaki içeriği yazalım.
App/controller/controller.php
1 2 3 4 5 6 7 8 9 | <?php namespace controller; class controller{ public function test(){ echo __NAMESPACE__."\control <br />"; } } ?> |
Daha sonra App klasörü icerisine yine model klasörü oluşturup model.php sayfasına aşağıdaki içeriği yazalım.
App/model/model.php
1 2 3 4 5 6 7 8 9 10 | <?php namespace model; class model{ public function test(){ echo __NAMESPACE__."\model<br />"; } } ?> |
Arıtk dosyalarınızın başına use direktifini yazmanız yeterli olcaktırk. Bu fonksiyon sayesinde sınıfılarınız otomatik yüklenecektir. Dikkat etmeniz gereken durum use ile bilirtiğiniz kısımda ilk isim klasör ismi oldununu unutmayın.