وراثت (Inheritance)
بازاستفاده کد با وراثت — کلاس فرزند، کلاس پدر، override کردن و کلمه protected
وراثت چیست؟
وراثت (Inheritance) به یک کلاس اجازه میدهد ویژگیها و متدهای کلاس دیگر را به ارث ببرد. این کار بازاستفاده کد را آسان میکند.
کلمه extends
<?php
// کلاس پدر
class Animal {
public $name;
public $age;
public function eat() {
return "$this->name در حال غذا خوردن است.";
}
public function sleep() {
return "$this->name در حال خوابیدن است.";
}
}
// کلاس فرزند
class Dog extends Animal {
public function bark() {
return "$this->name هاپ هاپ!";
}
}
// کلاس فرزند دیگر
class Cat extends Animal {
public function meow() {
return "$this->name میو!";
}
}
// استفاده
$dog = new Dog();
$dog->name = "رکس";
echo $dog->eat(); // از کلاس پدر
echo $dog->bark(); // از کلاس خودش
$cat = new Cat();
$cat->name = "پشمک";
echo $cat->eat(); // از کلاس پدر
echo $cat->meow(); // از کلاس خودش
?>
Override کردن
کلاس فرزند میتواند متد کلاس پدر را بازنویسی کند:
<?php
class Animal {
public function makeSound() {
return "صدای حیوان";
}
}
class Dog extends Animal {
public function makeSound() {
return "هاپ هاپ!"; // Override
}
}
class Cat extends Animal {
public function makeSound() {
return "میو!"; // Override
}
}
?>
کلمه parent::
برای فراخوانی متد کلاس پدر:
<?php
class Animal {
public function __construct($name) {
echo "حیوانی به نام $name ساخته شد.";
}
}
class Dog extends Animal {
public function __construct($name, $breed) {
parent::__construct($name); // فراخوانی سازنده پدر
$this->breed = $breed;
}
}
?>
کلمه final
با final میتوانید جلوی override را بگیرید:
<?php
class Base {
final public function importantMethod() {
return "این متد قابل override نیست.";
}
}
?>
کلمه abstract
کلاس انتزاعی نمیتواند مستقیماً نمونهسازی شود و کلاس فرزند باید متدهای آن را پیادهسازی کند:
<?php
abstract class Shape {
abstract public function getArea();
}
class Circle extends Shape {
public $radius;
public function getArea() {
return 3.14 * $this->radius ** 2;
}
}
class Rectangle extends Shape {
public $width;
public $height;
public function getArea() {
return $this->width * $this->height;
}
}
?>
این مبحث بخشی از دوره آموزش کامل PHP است.