Abstract(Soyut) Sınıflar ve Interface(Arayüzler)

Soyut sınıflar, kendisinden türetilecek olan sınıflara arayüz sağlar. Türeteceğiniz yeni sınıfları bir kalıba(arayüz) zorlar ve kalıtımla kod tekrarını azaltır. Soyut sınıfllar, tek başlarına bir anlam ifade etmezler. Bu yüzden soyut sınıflardan nesne üretilemez.

abstract  anahtar kelimesini metot veya sınıfların başlarına yazarak tanımlayabilirsiniz. Eğer bir absract metot tanımladıysanız kesinlikle o metotun sınıfını da abstract olarak tanımlamalısınız. Aksi takdirde hata verecektir.

Soyut metotlara  kendi sınıfı içinde gövde yazılamaz ve türetildiği sınıfta bu metotlar ezilmek(override) zorundadır yani yeniden tanımlanmalıdır.

Teknik bilgieri geçtiğimize göre örneğimize geçelim.



Composer Nedir?

Composer Nedir?

Kısaca PHP için geliştirilmiş bir bağımlılık yönetim aracıdır. Projenizde kullanmak istediğiniz kütüphane isimlerini tanımlarsınız Composer sizin için indirir ve kullanıma hazır hale getirir. Ayrıca güncelleme kolaylığıyla da kütüphanelerinizi uğraşmadan en güncel haliyle kullanabilirsiniz. Bitti mi? Bitmedi, abiler ablalar elimde görmüş olduğunuz Composer bizlere PSR standartlarında autoload da sunuyor. 

PHP dünyasının gerilmesini, tartışmasız composer engellemiştir. Çünkü java da maven, nodejs de npm, ruby de bundler gibi bağımlılık yöneticileri bulunmaktaydı. Composer'ın bize kazandırdıkları saymakla bitmez. Bu yüzden lafı çok uzatmadan anlatıma başlayayım.

Composer Nasıl Kurulur?

Linux/Unix İşletim Sistemlerinde:

1. Seçenek: Curl yüklü ise:

curl -sS https://getcomposer.org/installer | php

2. Seçenek: Eğer yüklü değilse aşağıdaki kod ile composer.phar dosyasını indirin:

php -r "readfile('https://getcomposer.org/installer');" | php

composer.phar dosyasını indirdikten sonra aşağıdaki kod ile sistem dizininize taşıyın.

mv composer.phar /usr/local/bin/composer

Windows İşletim Sisteminde:

Composer-Setup.exe dosyasını indirin ve kurun.




Autoload (Özdevinimli) Sınıf Yükleme

Autoload Nedir? Ne İşe Yar?

Sınıflarla ilgili işlem yaptığımız anda o sınıfın kaynak dosyasını sayfamıza otomatik dahil eder. Bu yazımda __autoload ve spl_autoload_register fonksiyonlarından bahsedeceğim.

Basit bir örnekle anlatıma başlayayım.

<?php

function __autoload($sinif_ismi)
{
    $sinif_adresi = __DIR__.DIRECTORY_SEPARATOR."lib".DIRECTORY_SEPARATOR.$sinif_ismi . ".php";

    //is_readable() : Bir dosyanın mevcut ve okunabilir olup olmadığını söyler
    if (is_readable($sinif_adresi)) {
        require $sinif_adresi;
    }
}

echo Kullanici::TANIM;

__autoload ( $class ){/* ... */} fonksiyonu erişmeye çalıştığınız sınıfları bulamazsa otomatik devreye girer ve sınıf adını parametre olarak bu fonksiyona gönderir. İstediğimiz işlemi bu fonksiyonun içinde yapabiliriz.

Yukarıdaki örnekte Kullanici sınıfımda bulunan TANIM sabitini ekrana yazdırdım. Kullanici sınıfım sayfama dahil edilmediği için __autoload($sinif_ismi = "Kullanici")){} fonksiyonu çalıştı.

Fonksiyonum içinde require "C:\xampp\htdocs\oop\lib\Kullanici.php" kod satırıyla Kullanici sınıfımı sayfama otomatik dahil etmiş oldum.

Namespace kullansaydık?

Sınıfımızda namespace tanımladığımız anda işler biraz daha karışıyor.



Sihirli Sabitler

Sihirli sabitler, değerleri kullanıldıkları yere göre değişen sabitlerdir. 

İsim Açıklama
__LINE__ Dosyada bu sabitin bulunduğu satırın numarası verir.
__FILE__ Dosyanın tam dosya yolu ve dosya isminin verir. include ile başka bir yerden dahil etseniz bile sabitin bulunduğu dosyanın yolunu gösterir.
__DIR__ Dosyanın bulunduğu dizini verir. include ile başka bir yerden dahil etseniz bile sabitin bulunduğu dosyanın yolunu gösterir.
__FUNCTION__ Fonksiyon ismini verir.
__CLASS__ Sınıf ismini verir.
__TRAIT__ Trait ismini verir.
__METHOD__ Metot ismini verir.
__NAMESPACE__ İsim Alanını gösterir.