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.

  • 🧱 Sınıflar ve Nesneler: Bir sınıf, gerçek dünyadaki bir şeyin özelliklerini ve yöntemlerini tanımlar ve bir nesne, o sınıfın tek bir örneğidir.
  • 🔒 Encapsulation: Genel erişime açık get ve set metotlarına sahip özel değişkenler, iç detayları gizler ve nesnenin durumunu korur.
  • 👪 Kalıtım: `extends` anahtar kelimesi, alt sınıfın üst sınıfın yöntemlerini yeniden kullanmasına olanak tanıyarak tekrarlanan kodu azaltır.
  • 🔁 Polimorfizm: Bir arayüz, birçok sınıfın tek tip bir kontrol mekanizması altında farklı şekilde uyguladığı standart yöntemleri tanımlar.tract.
  • 📐 UML Sınıf Diyagramı: Sınıf diyagramı, sınıf adını, değişkenleri ve metotları gösterir; artı, eksi ve '#' işaretleri ise sırasıyla public, private ve protected kapsamı belirtir.
  • 🧩 Arayüzler ve Absorpsiyonlartract: Bir karın kasıtracBir sınıf ortak kod paylaşırken, bir arayüz her sürücü sınıfının aynı yöntemleri sağlamasını garanti eder.
  • 🤖 Yapay Zeka Yardımı: Yapay zeka araçları, bir açıklamadan PHP sınıfı oluşturabilir ve prosedürel kodu temiz, nesne yönelimli koda dönüştürebilir.

PHP Nesne Yönelimli Programlama

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

OOP'ler Concepts PHP'de

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.

PHP'de bir sınıf oluşturun

Ş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.

PHP'de Kalıtımın uygulanması

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.

PHP'de Kalıtım

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ı.

PHP'de Kalıtım

Ş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.

SSS

Bir karın kasıtracBir sınıf hem uygulanan metotları hem de özellikleri içerebilir ve bir sınıf yalnızca birini genişletebilir. Bir arayüz yalnızca metot imzalarını bildirir ve bir sınıf birçok metot imzasını uygulayabilir. Mutlak bir yaklaşım kullanın.tracKod paylaşımı için bir sınıf, bir kısıtlamayı uygulamak için bir arayüz.tract.

Dört temel unsur kapsülleme, kalıtım, polimorfizm ve abs'dir.tracBu eğitim, ilk üçüne odaklanmaktadır; abstracBu özellik, PHP'nin abs ile desteklediği basit bir arayüzün ardında karmaşık ayrıntıları gizler.tract sınıfları ve arayüzleri.

Herkese açık üyelere her yerden erişilebilir, özel üyelere yalnızca aynı sınıf içinde erişilebilir ve korumalı üyelere ise sınıf ve alt sınıfları içinde erişilebilir. Her bir özelliği veya yöntemi kimin okuyabileceğini veya değiştirebileceğini kontrol ederek kapsüllemeyi sağlarlar.

Evet. Yapay zekaya alanları veya bir tablo tanımı verin, o da tür belirtilmiş özelliklere, bir kurucuya ve get ve set metotlarına sahip bir sınıf üretebilir. RevSınıfı kullanmadan önce türleri inceleyin ve doğrulama ekleyin.

Evet. Prosedürel kodu yapıştırın, yapay zeka ilgili fonksiyonları ve verileri sınıflar halinde gruplandırabilir, kapsülleme uygulayabilir ve kalıtım veya arayüzler önerebilir. Davranış aynı kalacağı için yeniden düzenlenmiş kodu test edin.

Bu yazıyı şu şekilde özetleyin: