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");
?>