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.
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;
?>