- 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
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!
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ıf | Arayüz |
|---|---|
| Soyut sınıfı tanımlamak için soyut anahtar sözcüğünü kullanın | Arayüzü tanımlamak için arayüz anahtar sözcüğünü kullanın |
| Soyut sınıf örneklenemez | Arayüz örneklenemiyor. |
| Soyut sınıfın normal ve soyut yöntemleri olabilir | Arayü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şletilir | Arayü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 |

