Soru, görüş ve önerileriniz için;

contact@fatih-karakus.com

PHP'de Nesne Yönelimli Programlama (OOP)

PHP'de Nesne Yönelimli Programlama (OOP)

PHP, nesne yönelimli programlama (OOP) yeteneklerine sahip bir programlama dilidir. OOP, programlamada verileri ve işlevleri birleştiren bir yaklaşımdır. Bu yaklaşım, kodun daha modüler, esnek ve sürdürülebilir olmasını sağlar. Bu makalede, PHP'de OOP konusunda temel kavramları ve kod örneklerini inceleyeceğiz.

Sınıflar ve Nesneler

PHP'de OOP'nin temel yapı taşları "sınıflar" ve "nesneler"dir. Bir "sınıf", bir nesnenin özelliklerini (alanlar) ve davranışlarını (metotlar) tanımlayan bir şablondur. Bir "nesne" ise bir sınıfın bir örneğidir. Her nesne, sınıf tarafından tanımlanan özelliklere sahip olur ve sınıfın metotlarını çalıştırabilir.

class Car {
    // Özellikler (alanlar)
    public $brand;
    public $model;
    public $color;
    
    // Metotlar (işlevler)
    public function startEngine() {
        echo "The car engine has started.";
    }
    
    public function drive() {
        echo "The car is driving.";
    }
}

// Car sınıfından bir nesne oluşturma
$car1 = new Car();

// Nesne özelliklerine erişim
$car1->brand = "Toyota";
$car1->model = "Corolla";
$car1->color = "Blue";

// Nesne metotlarını çağırma
$car1->startEngine(); // The car engine has started.
$car1->drive(); // The car is driving.

Yukarıdaki örnekte, Car adında bir sınıf tanımlanmıştır. Bu sınıf, brand, model ve color adında üç özellik (alan) içerir. Ayrıca startEngine() ve drive() adında iki metot (işlev) de tanımlanmıştır. Car sınıfından car1 adında bir nesne oluşturulmuş ve nesne özelliklerine erişilmiştir. Ayrıca nesne metotları çağrılmış ve sonuçları ekrana yazdırılmıştır.

Miras (Inheritance)

Miras (inheritance), sınıflar arasında bir ilişki kurarak kodun yeniden kullanılabilirliğini artıran bir OOP kavramıdır. Bir sınıf, başka bir sınıftan türetilerek (genişletilerek) onun özelliklerini ve davranışlarını devralabilir.

class Vehicle {
    public $brand;
    
    public function startEngine() {
        echo "The engine has started.";
    }
}

class Car extends Vehicle {
   public $model;
    public $color;
    
    public function drive() {
        echo "The car is driving.";
    }
}

$car1 = new Car();
$car1->brand = "Toyota";
$car1->model = "Corolla";
$car1->color = "Blue";

$car1->startEngine(); // The engine has started.
$car1->drive(); // The car is driving.

Yukarıdaki örnekte, Vehicle adında bir üst sınıf (ebeveyn sınıf) ve Car adında bir alt sınıf (çocuk sınıf) tanımlanmıştır. Car sınıfı, Vehicle sınıfından türetilmiştir (genişletilmiştir). Vehicle sınıfındaki $brand özelliği ve startEngine() metodu, Car sınıfına miras yoluyla aktarılmıştır. Car sınıfı ayrıca $model ve $color özelliklerini ve drive() metotunu da içerir. Car sınıfından oluşturulan car1 nesnesi, hem Vehicle sınıfının hem de Car sınıfının özelliklerini ve metotlarını kullanabilir.

Kapsülleme (Encapsulation)

Kapsülleme (encapsulation), nesnelerin özelliklerini (alanlarını) ve davranışlarını (metotlarını) birleştiren ve bunları sınıfın içinde bir arada tutan bir OOP prensibidir. Kapsülleme, veri gizliliğini (data privacy) ve kodun daha güvenli olmasını sağlar.

class BankAccount {
    private $balance;
    
    public function __construct($initialBalance) {
        $this->balance = $initialBalance;
    }
    
    public function deposit($amount) {
        $this->balance += $amount;
    }
    
    public function withdraw($amount) {
        if ($amount <= $this->balance) {
            $this->balance -= $amount;
        } else {
            echo "Insufficient balance.";
        }
    }
    
    public function getBalance() {
        return $this->balance;
    }
}

$account1 = new BankAccount(1000);
$account1->deposit(500);
$account1->withdraw(200);
echo $account1->getBalance(); // 1300

Yukarıdaki örnekte, BankAccount adında bir sınıf tanımlanmıştır. Bu sınıf, $balance adında özel bir özelliğe sahiptir. $balance özelliği, sadece sınıf içinde erişilebilir (private) olarak tanımlanmıştır. $balance özelliğine erişmek için getBalance() adında bir metot tanımlanmıştır. Bu metot, $balance özelliğinin değerini döndürür. $balance özelliğine değer atamak için deposit() ve withdraw() adında iki metot tanımlanmıştır. Bu metotlar, $balance özelliğinin değerini günceller.

Polimorfizm (Polymorphism)

Polimorfizm (polymorphism), aynı isimle farklı davranışlara sahip olan metotların kullanılmasını sağlayan bir OOP prensibidir. Polimorfizm, farklı sınıfların aynı adı taşıyan metotları farklı şekilde uygulayabilmesini sağlar.

interface Animal {
    public function makeSound();
}

class Dog implements Animal {
    public function makeSound() {
        echo "Woof!";
    }
}

class Cat implements Animal {
    public function makeSound() {
        echo "Meow!";
    }
}

$dog = new Dog();
$dog->makeSound(); // Woof!

$cat = new Cat();
$cat->makeSound(); // Meow!

Yukarıdaki örnekte, Animal adında bir arayüz tanımlanmıştır. Bu arayüz, makeSound() adında bir metot içerir. Dog ve Cat sınıfları, Animal arayüzünü uygular ve makeSound() metotunu kendi davranışlarıyla uygular. Dog sınıfının makeSound() metodu "Woof!" yazdırırken, Cat sınıfının makeSound() metodu "Meow!" yazdırır. Dog ve Cat nesneleri, Animal arayüzüne dayanarak aynı adı taşıyan makeSound() metotlarını farklı şekillerde uygulayabilir.

Sonuç

Sınıflar, nesneler, miras, kapsülleme ve polimorfizm gibi OOP kavramları, kodun daha modüler, esnek ve sürdürülebilir olmasını sağlar. OOP prensiplerine uygun olarak kod yazmak, daha okunabilir, yeniden kullanılabilir ve bakımı kolay bir kod tabanı oluşturmanıza yardımcı olur.

PHP'nin OOP yeteneklerini kullanarak karmaşık projeleri daha iyi yönetebilir, kodunuzun daha anlaşılır ve düzenli olmasını sağlayabilirsiniz. OOP'nin diğer konularını, ileri düzey konseptleri ve daha fazla detayı keşfetmek için PHP'nin resmi dokümantasyonunu ve kaynakları inceleyebilirsiniz.