PHP OOP - فئات مجردة
PHP - ما هي الفئات والطرق المجردة؟
تكون فئات وأساليب الملخص عندما يكون للفصل الأصلي طريقة محددة ، ولكنها تحتاج إلى فئة (فئات) فرعية لتعبئة المهام.
فئة abstract هي فئة تحتوي على طريقة مجردة واحدة على الأقل. الطريقة المجردة هي طريقة تم التصريح عنها ، ولكن لم يتم تنفيذها في الكود.
يتم تحديد فئة أو طريقة مجردة abstract
بالكلمة الأساسية:
بناء الجملة
<?php
abstract class
ParentClass {
abstract public function someMethod1();
abstract public function someMethod2($name, $color);
abstract
public function someMethod3() : string;
}
?>
عند التوريث من فئة مجردة ، يجب تحديد طريقة الفئة الفرعية بنفس الاسم ، ومعدِّل الوصول نفسه أو أقل تقييدًا. لذلك ، إذا تم تعريف الطريقة المجردة على أنها محمية ، فيجب تحديد طريقة الفئة الفرعية على أنها محمية أو عامة ، ولكن ليست خاصة. أيضًا ، يجب أن يكون نوع وعدد الوسائط المطلوبة هو نفسه. ومع ذلك ، قد تحتوي الفصول الفرعية على وسيطات اختيارية بالإضافة إلى ذلك.
لذلك ، عندما يتم توريث فئة فرعية من فئة مجردة ، لدينا القواعد التالية:
- يجب تعريف طريقة الفئة الفرعية بنفس الاسم وإعادة تعريف طريقة الملخص الأصل
- يجب تحديد أسلوب الفئة الفرعية بنفس معدل الوصول أو بمعدِّل وصول أقل تقييدًا
- يجب أن يكون عدد الوسائط المطلوبة هو نفسه. ومع ذلك ، قد تحتوي الفئة الفرعية على وسيطات اختيارية بالإضافة إلى ذلك
لنلقي نظرة على مثال:
مثال
<?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();
?>
شرح المثال
فئات أودي وفولفو وستروين موروثة من فئة السيارات. هذا يعني أنه يمكن لفئات Audi و Volvo و Citroen استخدام خاصية اسم $ العامة بالإضافة إلى طريقة __construct () العامة من فئة السيارة بسبب الوراثة.
لكن intro () هي طريقة مجردة يجب تحديدها في جميع الفئات الفرعية ويجب أن تُرجع سلسلة نصية.
PHP - المزيد من أمثلة الفصل المجردة
لنلقِ نظرة على مثال آخر حيث الطريقة المجردة لها وسيطة:
مثال
<?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");
?>
لنلقِ نظرة على مثال آخر حيث يحتوي التابع abstract على وسيطة ، والفئة الفرعية بها وسيطان اختياريان لم يتم تعريفهما في الطريقة abstract للوالد:
مثال
<?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");
?>