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.
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), 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), 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), 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.
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.