PHP Nesne Yönelimli Programlama (OOP) kavramı ve örneği
⚡ Akıllı Özet
PHP'de Nesne Yönelimli Programlama, sınıflar ve nesneler kullanarak bir uygulamayı gerçek dünya nesneleri etrafında modeller. Bu kılavuz, kapsülleme, kalıtım ve polimorfizm gibi OOP prensiplerini, PHP'nin bunları nasıl desteklediğini açıklar ve adım adım çalışan sınıf, kalıtım ve arayüz örnekleri oluşturur.

OOP nedir?
Nesne yönelimli programlama, bir uygulamayı çalışanlar, arabalar ve banka hesapları gibi gerçek dünya nesneleri etrafında modelleyen bir yazılım geliştirme yaklaşımıdır. Bir sınıf, gerçek dünya nesnesinin özelliklerini ve yöntemlerini tanımlar. Bir nesne, bir sınıfın örneğidir.
Nesne yönelimli programlamanın üç temel bileşeni şunlardır:
- Nesneye yönelik analiz – sistemin işlevselliği
- Nesne yönelimli tasarım – sistemin mimarisi
- Nesneye yönelik programlama – uygulamanın uygulanması
Nesneye Yönelik Programlama İlkeleri
Nesne yönelimli programlamanın üç temel ilkesi şunlardır:
- Encapsulation – Bu, uygulama ayrıntılarını gizlemek ve yalnızca yöntemleri göstermekle ilgilidir. Kapsüllemenin temel amaçları şunlardır:
- Yazılım geliştirme karmaşıklığını azaltın – uygulama ayrıntılarını gizleyerek ve yalnızca işlemleri açığa çıkararak, bir sınıfı kullanmak kolaylaşır.
- Nesnenin içsel durumunu koruyun – sınıf değişkenlerine erişim, get ve set gibi yöntemler aracılığıyla sağlanır. Bu, sınıfı esnek ve bakımı kolay hale getirir.
- Sınıfın iç implementasyonunun, sınıfı kullanan kodun bozulmasından endişe etmeden değiştirilmesine izin verin.
- miras – Bu, sınıflar arasındaki ilişkiyle ilgilidir. İlişki, ebeveyn ve çocuk şeklinde olur. Çocuk, ebeveyn sınıfında tanımlanan yöntemleri kullanır. Kalıtımın temel amacı şudur:
- Yeniden kullanılabilirlik – birden fazla alt sınıf aynı üst sınıftan miras alabilir. Bu, veritabanına veri ekleme, güncelleme ve silme gibi ortak işlevler sağlamamız gerektiğinde çok kullanışlıdır.
- Polimorfizm – Bu, birçok farklı uygulamaya sahip tek bir arayüze sahip olmakla ilgilidir. Polimorfizmin temel amacı şudur:
- Uygulamaların bakımını kolaylaştırmak ve genişletilebilirliğini artırmak.
OOP'ler Concepts PHP'de
PHP, nesne yönelimli bir betik dilidir; yukarıdaki tüm ilkeleri destekler. Yukarıdaki ilkeler şu yollarla sağlanır:
- Encapsulation – “get” ve “set” metotları ve erişim değiştiricileri kullanılarak.
- miras – extends anahtar kelimesinin kullanımı yoluyla
- Polimorfizm – implements anahtar kelimesinin kullanımı yoluyla
Artık OOP ile ilgili temel bilgiye ve bunun nasıl desteklendiğine sahibiz. PHPŞimdi yukarıdaki ilkeleri uygulayan örneklere bakalım.
UML nedir?
Birleşik Modelleme Dili (UML), nesne yönelimli sistemlerin tasarımı ve dokümantasyonunda kullanılan bir tekniktir.
UML birçok belge üretir, ancak biz nesne yönelimli PHP programlaması için çok önemli olan sınıf diyagramına bakacağız.
Sınıf Diyagramı Örneği
Sınıf Diyagramı Anahtarı
- MKS üst kutu sınıf adını içerir
- MKS orta kutu sınıf değişkenlerini içerir
- MKS alt kutu sınıf yöntemlerini içerir
- MKS eksi (-) Bu işaret özel kapsam anlamına gelir.
- MKS artı (+) işareti kamusal kapsam anlamına gelir
- MKS doğramak (#) işareti korunan kapsam anlamına gelir
PHP'de sınıf nasıl oluşturulur
Class anahtar sözcüğü PHP'de bir sınıfı tanımlamak için kullanılır. Aşağıda PHP'de sınıf oluşturma kuralları verilmiştir.
- Sınıf adı bir harfle başlamalıdır
- Sınıf adı PHP'ye ayrılmış bir sözcük olamaz
- Sınıf adı boşluk içeremez
Diyelim ki hayvanları temsil eden bir sınıf oluşturmak istiyoruz. Tüm hayvanlarda ortak olan özellikleri belirleyerek başlayacağız.
- Tüm hayvanlar otçul, etçil vb. gibi bir aileye aittir.
- Bütün hayvanlar yemek yer
Aşağıdaki diyagram, hayvanın sınıf diyagramını göstermektedir.
Şimdi Hayvan sınıfımızı kodlayalım.
<?php class Animal { private $family; private $food; public function __construct($family, $food) { $this->family = $family; $this->food = $food; } public function get_family() { return $this->family; } public function set_family($family) { $this->family = $family; } public function get_food() { return $this->food; } public function set_food($food) { $this->food = $food; } } ?>
İŞTE,
- “private $family, $food” ifadesi, değişkenlere sınıf dışından doğrudan erişilemeyeceği anlamına gelir (kapsülleme).
- “public function __construct($family…)” PHP yapıcı metodudur. Bu fonksiyon, sınıfın bir örneği oluşturulduğunda çağrılır. Bu örnekte, aileyi ve yemeği belirliyoruz.
- “public function get…()” ifadesi, aile veya besin değerine (kapsülleme) erişmek için kullanılan yöntemdir.
- “public function set…()” metodu, aile veya besin değerini (kapsülleme) ayarlamak için kullanılır.
PHP'de Kalıtımı Nasıl Uygulayabilirsiniz?
Bir inek ve bir aslanla çalışacağız. Hem inek hem de aslan, Hayvan sınıfından miras alır.
Aşağıdaki sınıf diyagramı ilişkileri göstermektedir.
Dikkat edin, inek Animal sınıfından miras alıyor ve kendi değişkenlerini ve yöntemlerini de tanımlıyor.
Şimdi de İnek sınıfını kodlayalım.
<?php class Cow extends Animal { private $owner; public function __construct($family, $food) { parent::__construct($family, $food); } public function set_owner($owner) { $this->owner = $owner; } public function get_owner() { return $this->owner; } } ?>
Şimdi Lion sınıfını kodlayalım.
<?php class Lion extends Animal { public function __construct($family, $food) { parent::__construct($family, $food); } } ?>
İŞTE,
- “class … extends Animal” ifadesi, İnek ve Aslan sınıflarının Hayvan sınıfından metotları kullanmasını sağlar (kalıtım).
Sınıfın bir nesnesini nasıl oluştururum?
Basitlik açısından Animal, Cow ve Lion sınıflarının tümü aynı dizinde olmalıdır.
Şimdi sınıflarımızı kullanan uygulamayı oluşturalım.
PHP Sınıfı Örneği
<?php require 'Animal.php'; require 'Cow.php'; require 'Lion.php'; $cow = new Cow('Herbivore', 'Grass'); $lion = new Lion('Carnivore', 'Meat'); echo '<b>Cow Object</b> <br>'; echo 'The Cow belongs to the ' . $cow->get_family() . ' family and eats ' . $cow->get_food() . '<br><br>'; echo '<b>Lion Object</b> <br>'; echo 'The Lion belongs to the ' . $lion->get_family() . ' family and eats ' . $lion->get_food(); ?>
Uygulamamızı test etme
Şimdi uygulamamızı bir web tarayıcısında görüntüleyelim.
Her iki nesne de Animal sınıfından miras alınan get_family ve get_food yöntemlerini yeniden kullanıyor; bu da kalıtımın nasıl işlediğini gösteriyor.
PHP'de Polimorfizm Nasıl Uygulanır?
Diyelim ki, aşağıdaki gibi farklı veritabanı motorlarına bağlanabilen bir uygulama geliştirmek istiyoruz: MySQL hem de SQL Sunucu aynı tek tip arayüzü kullanıyor. Standart yöntemleri ve mutlak bir tanımı belirleyen bir arayüz oluşturabiliriz.tracOrtak yöntemleri uygulayan sınıf.
- arayüzey – bir sınıfa benzer. Yalnızca yöntemleri ve parametreleri tanımlar.
- Abstract sınıfı – Doğrudan bir nesne oluşturmak için kullanılamayan bir sınıftır. Amacı ortak yöntemlerin kısmen veya tamamen uygulanmasını sağlamaktır.
Aşağıdaki sınıf diyagramı, abs'lerimiz arasındaki ilişkiyi göstermektedir.tract sınıfı, arayüz ve uygulama sınıfları.
Şimdi karın kaslarımızı oluşturalım.tract sınıfı.
<?php abstract class DBCommonMethods { private $host; private $db; private $uid; private $password; public function __construct($host, $db, $uid, $password) { $this->host = $host; $this->db = $db; $this->uid = $uid; $this->password = $password; } } ?>
İŞTE,
- “abstrac"T sınıfı" ifadesi, sınıfın doğrudan nesne oluşturmak için kullanılamayacağı anlamına gelir.
- “$host, $db…” tüm uygulamalarda ortak olan sınıf değişkenleridir.
- “__construct(…)” fonksiyonu, sınıfın başlangıcında ortak değişken değerlerini belirleyen sınıf kurucu metodudur.
Şimdi, veritabanı motoruna bağlı olarak farklı şekilde uygulanacak olan standart yöntemleri içeren arayüzü oluşturalım.
<?php
interface DBInterface
{
public function db_connect();
public function insert($data);
public function read($where);
public function update($where);
public function delete($where);
}
?>
İŞTE,
- “arayüz” arayüz oluşturmak için kullanılan anahtar kelimedir
- “kamu işlevi…(…)” uygulanması gereken standart yöntemlerdir
Şimdi DBCommonMethods sınıfını genişletecek ve DBInterface arayüzünü uygulayacak somut sınıfları oluşturalım. İlk olarak, MySQLSürücü.php:
<?php class MySQLDriver extends DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) { parent::__construct($host, $db, $uid, $password); } public function db_connect() { /* connect code goes here */ } public function delete($where) { /* delete code goes here */ } public function insert($data) { /* insert code goes here */ } public function read($where) { /* read code goes here */ } public function update($where) { /* update code goes here */ } } ?>
Ardından, MSSQLServerDriver.php:
<?php class MSSQLServerDriver extends DBCommonMethods implements DBInterface { public function __construct($host, $db, $uid, $password) { parent::__construct($host, $db, $uid, $password); } public function db_connect() { /* connect code goes here */ } public function delete($where) { /* delete code goes here */ } public function insert($data) { /* insert code goes here */ } public function read($where) { /* read code goes here */ } public function update($where) { /* update code goes here */ } } ?>
İŞTE,
- “class … extends DBCommonMethods” ifadesi, DBCommonMethods sınıfındaki metotları kullanır.
- “… DBInterface'i uygular” ifadesi, kullanılan veritabanı sürücüsünden bağımsız olarak sınıfın standart yöntemleri sağlamasını garanti eder.
Yukarıdaki sınıfları kullanan kod şu şekilde görünür:
<?php $db = new MySQLDriver($host, $db, $uid, $password); ?>
Veya:
<?php $db = new MSSQLServerDriver($host, $db, $uid, $password); ?>
Kodun geri kalanı her iki sürücü için de aynı olacaktır, örneğin:
<?php $db->db_connect(); $db->insert($data); ?>
Bu, polimorfizmin işleyiş biçimidir: aynı metot çağrıları, arayüzü uygulayan herhangi bir sürücüde çalışır, bu nedenle veritabanı motorlarını değiştirdiğinizde çevreleyen kod asla değişmez.





