PHP

PHP’de Sınıf ve Nesne Kullanımı

PHP'de Sınıf ve Nesne Kullanımı

Modern web geliştirme süreçlerinde kodun tekrar kullanılabilirliği, okunabilirliği ve bakımının kolay olması büyük önem taşır. PHP, sürümler ilerledikçe prosedürel bir dil olmaktan çıkıp güçlü bir nesne yönelimli programlama (OOP) yapısına kavuşmuştur. Bu yaklaşımın temel yapı taşı sınıf ve nesne ilişkisidir.

Nesne Yönelimli Programlama ve Temel Mantık

Prosedürel programlamada işlemler ardışık fonksiyonlar ve değişkenler üzerinden yürütülürken, nesne yönelimli programlamada gerçek dünyadaki varlıklar koda aktarılır. Kod blokları birbirine bağımlı uzun listeler yerine, kendi sorumluluğunu taşıyan parçalara bölünür.

Bu yaklaşım yazılım mimarisine birçok doğrudan avantaj sağlar:

  • Kod tekrarını önleyerek geliştirme sürecini hızlandırır.
  • Büyük ölçekli projelerde ekiplerin eşzamanlı çalışmasını kolaylaştırır.
  • Hata ayıklama süreçlerini hızlandırır, çünkü hatanın hangi yapıdan kaynaklandığı kolayca tespit edilir.
  • Veri güvenliğini artıran kapsülleme mekanizmalarını devreye sokar.

Sınıf ve Nesne Kavramları Arasındaki Fark

Sınıf (class), bir nesnenin sahip olacağı özellikleri (properties) ve yapacağı eylemleri (methods) tanımlayan genel bir taslaktır. Bir mimari plan gibi düşünülebilir. Nesne (object) ise bu plandan üretilen somut yapıdır.

Örneğin, mimari çizim bir sınıftır. Bu çizim kullanılarak inşa edilen her bir gerçek bina ise bir nesnedir. Tek bir sınıf şablonundan sonsuz sayıda bağımsız nesne üretilebilir.

Sınıf Tanımlama

PHP’de sınıf tanımlamak için class anahtar kelimesi kullanılır. Tanımlanan bu yapı içerisine değişkenler ve fonksiyonlar yerleştirilir. Sınıf içindeki değişkenlere özellik (property), fonksiyonlara ise metot (method) denir.

class Kullanici {
    public $kullaniciAdi;
    public $eposta;

    public function bilgileriGoster() {
        return "Kullanici: " . $this->kullaniciAdi . " (" . $this->eposta . ")";
    }
}

Bu örnekte Kullanici adında bir php class oluşturduk. Sınıf içinde iki özellik ve bu özellikleri ekrana formatlı biçimde döndüren bir metot tanımladık. Metot içinde geçen $this anahtar kelimesi, o an üzerinde çalışılan nesnenin kendisini temsil eder.

Nesne Oluşturma

Bir sınıftan nesne üretmek için new anahtar kelimesi kullanılır. Üretilen her nesne, sınıfta tanımlanan yapıları kendi hafıza alanında bağımsız olarak taşır.

$kullanici1 = new Kullanici();
$kullanici1->kullaniciAdi = "yunus";
$kullanici1->eposta = "yunus@example.com";

$kullanici2 = new Kullanici();
$kullanici2->kullaniciAdi = "kaytan";
$kullanici2->eposta = "kaytan@example.com";

echo $kullanici1->bilgileriGoster();
echo $kullanici2->bilgileriGoster();

Yukarıdaki kod parçasında aynı sınıf taslağından iki farklı nesne oluşturduk. Her nesnenin özellikleri birbirini etkilemeyecek şekilde ayrılmıştır. ‘->’ işleci, nesne üzerinden metotlara ve özelliklere erişmeyi sağlar.

Kurucu ve Yıkıcı Metotlar

PHP’de nesne yaşam döngüsünü kontrol eden özel metotlar (magic methods) bulunur. Bunların başında kurucu metot (__construct) ve yıkıcı metot (__destruct) gelir.

Kurucu metot, nesne belleğe yüklendiği anda otomatik olarak çalışır. Genellikle nesneye ait temel parametreleri başlatmak için kullanılır. Yıkıcı metot ise nesnenin işi bittiğinde veya betik sonlandığında hafızadan silinirken tetiklenir.

class VeritabaniBaglantisi {
    public $baglantiAdi;

    public function __construct($ad) {
        $this->baglantiAdi = $ad;
        echo $this->baglantiAdi . " baglantisi acildi.n";
    }

    public function __destruct() {
        echo $this->baglantiAdi . " baglantisi guvenle kapatildi.n";
    }
}

$baglanti = new VeritabaniBaglantisi("MySQL");

Nesne oluşturulurken parametre olarak verilen değer, __construct metodu aracılığıyla doğrudan ilgili özelliğe atanır. Betik sona erdiğinde PHP motoru __destruct metodunu devreye sokar ve kaynaklar serbest bırakılır.

Erişim Belirleyiciler

Sınıf üyelerine dışarıdan erişimin sınırlandırılması hem veri bütünlüğü hem de siber güvenlik açısından kritik bir konudur. PHP üç farklı erişim belirleyici sunar:

  • public: Her yerden erişilebilir. Sınıf içinden, alt sınıflardan veya sınıf dışından doğrudan okunabilir ve değiştirilebilir.
  • private: Yalnızca tanımlandığı sınıf içerisinden erişilebilir. Sınıf dışından veya miras alan alt sınıflardan erişilemez.
  • protected: Tanımlandığı sınıf içinden ve bu sınıftan türetilen alt sınıflardan erişilebilir, dış dünyadan doğrudan çağrılamaz.

Kapsülleme ve Getter-Setter Metotları

Hassas verilerin dış müdahalelerden korunması işlemine kapsülleme (encapsulation) denir. Özellikleri private yaparak dışarıya kapatır, bu verilere kontrollü erişimi public fonksiyonlar (getter ve setter) üzerinden sağlarız.

class Hesap {
    private $bakiye = 0;

    public function paraYatir($miktar) {
        if ($miktar > 0) {
            $this->bakiye += $miktar;
        }
    }

    public function bakiyeOgren() {
        return $this->bakiye;
    }
}

$hesap = new Hesap();
$hesap->paraYatir(250);
echo $hesap->bakiyeOgren();

Bu yapıda $bakiye özelliğine dışarıdan doğrudan müdahale edilemez. Böylece negatif bir bakiye atanması gibi hatalı veya saldırgan manipülasyonlar paraYatir metodu içerisindeki doğrulama mantığı ile engellenir.

Kalıtım Mekanizması

Kalıtım (inheritance), mevcut bir sınıfın özelliklerini ve metotlarını başka bir sınıfa aktarmasını sağlar. Kod tekrarını önleyen en güçlü mekanizmalardan biridir. PHP’de kalıtım extends anahtar kelimesi ile uygulanır.

class Calisan {
    public $isim;
    public $maas;

    public function __construct($isim, $maas) {
        $this->isim = $isim;
        $this->maas = $maas;
    }

    public function bilgileriBas() {
        return "Personel: " . $this->isim;
    }
}

class GuvenlikUzmani extends Calisan {
    public $sertifikaSayisi;

    public function guvenlikRaporuOlustur() {
        return $this->isim . " adli uzman tarafindan zafiyet taramasi yapildi.";
    }
}

$uzman = new GuvenlikUzmani("Ahmet", 45000);
$uzman->sertifikaSayisi = 4;

echo $uzman->bilgileriBas();
echo $uzman->guvenlikRaporuOlustur();

GuvenlikUzmani sınıfı, Calisan sınıfından türetilmiştir. Dolayısıyla üst sınıfta tanımlanan isim ve maas özelliklerini doğrudan miras alır ve kendine has yeni metotlar ekleyebilir.

Sınıf Tasarımında Güvenlik Yaklaşımları

Web güvenliği bağlamında PHP sınıfları tasarlanırken bazı temel güvenlik ilkelerine dikkat edilmelidir:

  • Özelliklerin varsayılan olarak private tanımlanması ve yalnızca zorunlu hallerde açılması en az yetki prensibine uygundur.
  • Girdilerin sınıf metotlarına girdiği anda filtrelenmesi, SQL injection ve XSS açıklarını önlemede temel adımdır.
  • Dışarıya sızmaması gereken kimlik bilgileri, API anahtarları veya veritabanı şifreleri sınıf içinde kesinlikle açık metin (hardcoded) olarak saklanmamalıdır.
  • Güvenilmeyen kullanıcı girdileriyle unserialize() fonksiyonu çağrılmamalıdır; PHP nesne enjeksiyonu zafiyetleri doğrudan bu hatadan kaynaklanır.

Özet ve Sonraki Adımlar

PHP dilinde sınıf ve nesne yapısı, modüler ve güvenli uygulamalar geliştirmenin omurgasını oluşturur. Sınıfları bir şablon, nesneleri ise bu şablonun somut ürünleri olarak tanımladık; kurucu metotların, görünürlük belirleyicilerin ve kalıtımın işlevini kod üzerinden inceledik.

Bir sonraki adımda, nesne yönelimli tasarım prensiplerini daha ileriye taşımak için arayüzler (interface), soyut sınıflar (abstract class), statik metotlar ve isim alanları (namespaces) konularını inceleyebilirsiniz.

#nesne yonelimli programlama#oop#php#php class#yazılım geliştirme

コメント

まだコメントはありません。最初のコメントをどうぞ。

コメントを書く

コメントは管理者の承認後に公開されます。