raderde 1
raderde
Cannn6161 1
Cannn6161
noisiv 1
noisiv
Manwe Work 1
Manwe Work
Mt2Hizmet 1
Mt2Hizmet
melankolıa18 1
melankolıa18
romegames 1
romegames
Krutzo 1
Krutzo
shrpnl 1
shrpnl
Hikaye Ekle
Reklam vermek için turkmmo@gmail.com

PHP – Soyut Sınıflar

Carissa

Administrator
Telefon Numarası Onaylanmış Üye TC Kimlik Numarası Doğrulanmış Üye Turkmmo Discord Nitro Booster
Admin
VIP Üye
Katılım
2 Mar 2015
Konular
59,189
Mesajlar
88,441
Çözüm
109
Online süresi
4mo 16d
Reaksiyon Skoru
14,280
Altın Konu
2,398
TM Yaşı
11 Yıl 3 Ay 7 Gün
Başarım Puanı
1,051
MmoLira
695,092
DevLira
234
Ticaret - 0%
0   0   0

ROHAN2 WORLD 1-120 TR TİPİ OFFICIAL YOHARA, BALATHOR VE AMON! 80. GÜNÜNDE! +10.000 ONLİNE! HİLE VE BOT %100 ENGELLİ HEMEN TIKLA!

cats.jpg


PHP'deki ayrılmış sözcükler listesi "abstract" anahtar sözcüğünü içerir. Bir sınıf "abstract" anahtar sözcüğüyle tanımlandığında, örneklenemez, yani böyle bir sınıfın yeni bir nesnesini bildiremezsiniz. Soyut bir sınıf başka bir sınıf tarafından genişletilebilir.

abstract class myclass {
// class body
}

Yukarıda belirtildiği gibi, bu sınıfın bir nesnesini bildiremezsiniz . Bu nedenle, aşağıdaki ifade:

$obj = new myclass;

aşağıda gösterildiği gibi bir hata mesajıyla sonuçlanacaktır.

PHP Fatal error: Uncaught Error: Cannot instantiate abstract class myclass

Soyut bir sınıf, özellikler, sabitler veya yöntemler içerebilir. Sınıf üyeleri genel, özel veya korumalı türde olabilir. Bir sınıftaki bir veya daha fazla yöntem de soyut olarak tanımlanabilir.

Bir sınıftaki herhangi bir yöntem soyutsa, sınıfın kendisi soyut bir sınıf olmalıdır. Başka bir deyişle, normal bir sınıfta tanımlanmış soyut bir yöntem olamaz.

Bu bir hataya neden olacaktır:

PHP:
class myclass {
   abstract function myabsmethod($arg1, $arg2);
   function mymethod() #this is a normal method {
      echo "Hello";
   }
}

Hata mesajı şu şekilde gösterilecektir:

PHP Fatal error: Class myclass contains 1 abstract method
and must therefore be declared abstract

Soyut bir sınıfı ebeveyn olarak kullanabilir ve onu bir çocuk sınıfla genişletebilirsiniz. Ancak, çocuk sınıf ebeveyn sınıftaki her soyut yöntemin somut uygulamasını sağlamalıdır, aksi takdirde bir hatayla karşılaşılır.

Örnek

Aşağıdaki kodda, myclass soyut bir sınıftır ve soyut bir yöntem olarak myabsmethod()'u kullanır. Türetilmiş sınıfı mynewclass'tır, ancak ebeveyninde soyut yöntemin uygulaması yoktur.

PHP:
<?php
   abstract class myclass {
      abstract function myabsmethod($arg1, $arg2);
      function mymethod() {
         echo "Hello";
      }
   }
   class newclass extends myclass {
      function newmethod() {
         echo "World";
      }
   }
   $m1 = new newclass;
   $m1->mymethod();
?>

Böyle bir durumda hata mesajı şudur:

PHP Fatal error: Class newclass contains 1 abstract method and must
therefore be declared abstract or implement the remaining
methods (myclass::myabsmethod)

newclass'ın ya soyut metodu uygulaması gerektiğini ya da soyut sınıf olarak tanımlanması gerektiğini belirtir.


Örnek

Aşağıdaki PHP betiğinde, marks'ı soyut bir sınıf olarak kullanıyoruz ve percentage()'i de soyut bir metot olarak kullanıyoruz. Başka bir öğrenci sınıfı marks sınıfını genişletiyor ve onun percentage() metodunu uyguluyor.

PHP:
<?php
   abstract class marks {
      protected int $m1, $m2, $m3;
      abstract public function percent(): float;
   }

   class student extends marks {
      public function __construct($x, $y, $z) {
         $this->m1 = $x;
         $this->m2 = $y;
         $this->m3 = $z;
      }
      public function percent(): float {
         return ($this->m1+$this->m2+$this->m3)*100/300;
      }
   }

   $s1 = new student(50, 60, 70);
   echo "Percentage of marks: ". $s1->percent() . PHP_EOL;
?>

Aşağıdaki çıktıyı üretecektir:

Percentage of marks: 60

PHP'de Arayüz ve Soyut Sınıf Arasındaki Fark

PHP'deki soyut sınıf kavramı arayüze çok benzer. Ancak, arayüz ve soyut sınıf arasında birkaç fark vardır.

Soyut sınıfArayüz
Soyut sınıfı tanımlamak için soyut anahtar sözcüğünü kullanınArayüzü tanımlamak için arayüz anahtar sözcüğünü kullanın
Soyut sınıf örneklenemezArayüz örneklenemiyor.
Soyut sınıfın normal ve soyut yöntemleri olabilirArayüz, metotları yalnızca argümanlar ve dönüş tipleri ile bildirmeli, herhangi bir gövde ile bildirmemelidir.
Soyut sınıf, tüm soyut yöntemleri uygulaması gereken alt sınıf tarafından genişletilirArayüz, arayüzdeki tüm metotların işlevselliğini sağlaması gereken başka bir sınıf tarafından uygulanmalıdır.
Kamuya açık, özel veya korunan mülklere sahip olabilirÖzellikler arayüzde bildirilemez
 

Şu an konuyu görüntüleyenler (Toplam : 0, Üye: 0, Misafir: 0)

Geri
Üst