وراثت (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 است.

ابزارهای مرتبط