PHP Eğitimi

PHP ANA SAYFA PHP'ye Giriş PHP Kurulumu PHP Sözdizimi PHP Yorumları PHP Değişkenleri PHP Yankı / Yazdır PHP Veri Türleri PHP Dizeleri PHP Numaraları PHP Matematik PHP Sabitleri PHP Operatörleri PHP If...Else...Elseif PHP Anahtarı PHP Döngüleri PHP Fonksiyonları PHP Dizileri PHP Süper Küreseller PHP Normal İfade

PHP Formları

PHP Form İşleme PHP Form Doğrulama PHP Formu Gerekli PHP Formu URL/E-posta PHP Formu Tamamlandı

PHP Gelişmiş

PHP Tarih ve Saat PHP Dahil PHP Dosya İşleme PHP Dosyası Aç/Oku PHP Dosyası Oluştur/Yaz PHP Dosya Yükleme PHP Çerezleri PHP Oturumları PHP Filtreleri PHP Filtreleri Gelişmiş PHP Geri Çağırma İşlevleri PHP JSON'u PHP İstisnaları

PHP OOP

PHP OOP nedir PHP Sınıfları/Nesneleri PHP Oluşturucu PHP Yıkıcı PHP Erişim Değiştiricileri PHP Kalıtımı PHP Sabitleri PHP Soyut Sınıfları PHP Arayüzleri PHP Özellikleri PHP Statik Yöntemler PHP Statik Özellikler PHP Ad Alanları PHP Yinelenebilirler

MySQL Veritabanı

MySQL Veritabanı MySQL Bağlantısı MySQL Veritabanı Oluştur MySQL Tablo Oluştur MySQL Veri Ekle MySQL Son Kimliği Al MySQL Ekle Çoklu MySQL Hazırlandı MySQL Seçim Verisi MySQL Nerede MySQL Sıralaması MySQL Verileri Sil MySQL Güncelleme Verileri MySQL Sınır Verileri

PHP XML'i

PHP XML Ayrıştırıcıları PHP SimpleXML Ayrıştırıcı PHP SimpleXML - Al PHP XML Expat'ı PHP XML DOM'si

PHP - AJAX

AJAX'a Giriş AJAX PHP AJAX Veritabanı AJAX XML'i AJAX Canlı Arama AJAX Anketi

PHP Örnekleri

PHP Örnekleri PHP Derleyici PHP Testi PHP Alıştırmaları PHP Sertifikası

PHP Referansı

PHP'ye Genel Bakış PHP Dizisi PHP Takvimi PHP Tarihi PHP Dizini PHP Hatası PHP İstisnası PHP Dosya Sistemi PHP Filtresi PHP FTP'si PHP JSON'u PHP Anahtar Kelimeler PHP Libxml PHP Postası PHP Matematik PHP Çeşitli PHP MySQLi PHP Ağı PHP Çıkış Kontrolü PHP Normal İfade PHP SimpleXML PHP Akışı PHP Dizisi PHP Değişken İşleme PHP XML Ayrıştırıcı PHP Posta Kodu PHP Saat Dilimleri

PHP OOP - Soyut Sınıflar


PHP - Soyut Sınıflar ve Yöntemler Nelerdir?

Soyut sınıflar ve yöntemler, üst sınıfın adlandırılmış bir yöntemi olduğu, ancak görevleri tamamlamak için alt sınıflarına ihtiyaç duyduğu zamandır.

Soyut bir sınıf, en az bir soyut yöntem içeren bir sınıftır. Soyut bir yöntem, bildirilen ancak kodda uygulanmayan bir yöntemdir.

Anahtar kelimeyle soyut bir sınıf veya yöntem tanımlanır abstract :

Sözdizimi

<?php
abstract class ParentClass {
  abstract public function someMethod1();
  abstract public function someMethod2($name, $color);
  abstract public function someMethod3() : string;
}
?>

Soyut bir sınıftan miras alınırken, alt sınıf yöntemi aynı adla ve aynı veya daha az kısıtlanmış erişim değiştiricisiyle tanımlanmalıdır. Bu nedenle, soyut yöntem korumalı olarak tanımlanırsa, alt sınıf yöntemi korumalı veya genel olarak tanımlanmalıdır, ancak özel olarak tanımlanmamalıdır. Ayrıca, gerekli bağımsız değişkenlerin türü ve sayısı aynı olmalıdır. Ancak, alt sınıfların ek olarak isteğe bağlı argümanları olabilir.

Bu nedenle, bir alt sınıf soyut bir sınıftan miras alındığında aşağıdaki kurallara sahibiz:

  • Alt sınıf yöntemi aynı adla tanımlanmalıdır ve ana soyut yöntemi yeniden bildirir.
  • Alt sınıf yöntemi, aynı veya daha az kısıtlı erişim değiştiricisi ile tanımlanmalıdır.
  • Gerekli argümanların sayısı aynı olmalıdır. Ancak, alt sınıfın ek olarak isteğe bağlı argümanları olabilir.

Bir örneğe bakalım:

Örnek

<?php
// Parent class
abstract class Car {
  public $name;
  public function __construct($name) {
    $this->name = $name;
  }
  abstract public function intro() : string;
}

// Child classes
class Audi extends Car {
  public function intro() : string {
    return "Choose German quality! I'm an $this->name!";
  }
}

class Volvo extends Car {
  public function intro() : string {
    return "Proud to be Swedish! I'm a $this->name!";
  }
}

class Citroen extends Car {
  public function intro() : string {
    return "French extravagance! I'm a $this->name!";
  }
}

// Create objects from the child classes
$audi = new audi("Audi");
echo $audi->intro();
echo "<br>";

$volvo = new volvo("Volvo");
echo $volvo->intro();
echo "<br>";

$citroen = new citroen("Citroen");
echo $citroen->intro();
?>

Örnek Açıklama

Audi, Volvo ve Citroen sınıfları, Araba sınıfından miras alınır. Bu, Audi, Volvo ve Citroen sınıflarının, kalıtım nedeniyle Car sınıfından public $name özelliğinin yanı sıra public __construct() yöntemini kullanabileceği anlamına gelir.

Ancak intro(), tüm alt sınıflarda tanımlanması ve bir dize döndürmesi gereken soyut bir yöntemdir.



PHP - Daha Soyut Sınıf Örnekleri

Soyut yöntemin bir argümanı olduğu başka bir örneğe bakalım:

Örnek

<?php
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  public function prefixName($name) {
    if ($name == "John Doe") {
      $prefix = "Mr.";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs.";
    } else {
      $prefix = "";
    }
    return "{$prefix} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>

Soyut yöntemin bir argümana sahip olduğu ve alt sınıfın ebeveynin soyut yönteminde tanımlanmayan iki isteğe bağlı argümana sahip olduğu başka bir örneğe bakalım:

Örnek

<?php
abstract class ParentClass {
  // Abstract method with an argument
  abstract protected function prefixName($name);
}

class ChildClass extends ParentClass {
  // The child class may define optional arguments that are not in the parent's abstract method
  public function prefixName($name, $separator = ".", $greet = "Dear") {
    if ($name == "John Doe") {
      $prefix = "Mr";
    } elseif ($name == "Jane Doe") {
      $prefix = "Mrs";
    } else {
      $prefix = "";
    }
    return "{$greet} {$prefix}{$separator} {$name}";
  }
}

$class = new ChildClass;
echo $class->prefixName("John Doe");
echo "<br>";
echo $class->prefixName("Jane Doe");
?>