وراثت در PHP

php inheritance
20 آبان 1403

وراثت یا به اصطلاح Inheritance یکی از مفاهیم مهم و پایه‌ای در برنامه‌نویسی شی‌گرا است. این مفهوم به ما اجازه می‌دهد تا از یک کلاس‌ پایه، کلاس‌های جدیدی بسازیم که ویژگی‌ها و رفتارهای کلاس‌ پایه را به ارث می‌برند و در عین حال می‌توانند ویژگی‌ها و رفتارهای خود را نیز داشته باشند. این ویژگی باعث می‌شود تا کد ما منعطف‌تر و قابل‌استفاده مجدد بیشتری باشد.

در PHP، برای ایجاد وراثت، از کلمه کلیدی extends استفاده می‌کنیم. وقتی یک کلاس جدید تعریف می‌کنیم و می‌خواهیم آن را از کلاس پایه‌ای به ارث ببریم، کافیست پس از نام کلاس جدید، کلمه کلیدی extends و سپس نام کلاس پایه را ذکر کنیم.

یکی از مثال‌های ساده و کاربری از وراثت می‌تواند تعریف یک کلاس پایه به نام Vehicle (وسیله نقلیه) باشد که شامل ویژگی‌هایی مثل رنگ و سرعت است. سپس می‌توانیم کلاس‌های جدیدی مثل Car (ماشین) و Motorcycle (موتور سیکلت) تعریف کنیم که از Vehicle به ارث می‌برند و هر کدام ویژگی‌های خاص خود مثل تعداد چرخ برای Motorcycle و نوع گیرنده برای Car را دارا هستند.

وراثت به ما کمک می‌کند از تکرار کد جلوگیری کنیم و در نهایت کد خواناتر و مدیریت‌پذیرتری داشته باشیم. همچنین می‌توانیم از متدها و ویژگی‌های کلاس پایه در کلاس‌های فرزند استفاده کنیم و یا در صورت نیاز آن‌ها را بازنویسی کنیم.

مثال کد وراثت در PHP

<?php
class Vehicle {
public $color;
public $speed;

public function setProperties($color, $speed) {
$this->color = $color;
$this->speed = $speed;
}

public function displayInfo() {
echo "Color: " . $this->color . " | Speed: " . $this->speed . " km/h";
}
}

class Car extends Vehicle {
public $gearType;

public function setGearType($gearType) {
$this->gearType = $gearType;
}

public function displayCarInfo() {
$this->displayInfo();
echo " | Gear Type: " . $this->gearType;
}
}

$car = new Car();
$car->setProperties("Red", 150);
$car->setGearType("Automatic");
$car->displayCarInfo();
?>

توضیح خط به خط کد

class Vehicle {
تعریف یک کلاس پایه به نام Vehicle.

public $color;
تعریف یک ویژگی رنگ برای کلاس.

public $speed;
تعریف یک ویژگی سرعت برای کلاس.

public function setProperties($color, $speed) {
تعریف تابعی جهت مقداردهی ویژگی‌های رنگ و سرعت.

$this->color = $color;
مقداردهی به ویژگی رنگ از طریق پارامتر ورودی.

$this->speed = $speed;
مقداردهی به ویژگی سرعت از طریق پارامتر ورودی.

public function displayInfo() {
تعریف تابعی جهت نمایش ویژگی‌های وسیله نقلیه.

echo "Color: " . $this->color . " | Speed: " . $this->speed . " km/h";
چاپ اطلاعات وسیله نقلیه.

class Car extends Vehicle {
تعریف کلاس ماشین که از کلاس Vehicle ارث می‌برد.

public $gearType;
تعریف ویژگی نوع دنده برای کلاس ماشین.

public function setGearType($gearType) {
تعریف تابعی جهت مقداردهی به ویژگی نوع دنده.

$this->gearType = $gearType;
مقداردهی به ویژگی نوع دنده از طریق پارامتر ورودی.

public function displayCarInfo() {
تعریف تابعی جهت نمایش اطلاعات ماشین که شامل اطلاعات وسیله نقلیه نیز هست.

$this->displayInfo();
فراخوانی تابع displayInfo از کلاس پایه جهت نمایش اطلاعات عمومی وسیله نقلیه.

echo " | Gear Type: " . $this->gearType;
افزودن اطلاعات نوع دنده به اطلاعات نمایش داده شده.

$car = new Car();
ایجاد یک نمونه جدید از کلاس Car.

$car->setProperties("Red", 150);
مقداردهی ویژگی‌های رنگ و سرعت ماشین.

$car->setGearType("Automatic");
مقداردهی ویژگی نوع دنده ماشین به صورت اتوماتیک.

$car->displayCarInfo();
نمایش اطلاعات کامل ماشین شامل رنگ، سرعت و نوع دنده.

سوالات متداول

؟

چگونه می‌توان از وراثت در PHP استفاده کرد؟

؟

تفاوت وراثت با سایر مفاهیم شی‌گرا چیست؟

؟

آیا می‌توان متدهای کلاس پایه را در کلاس فرزند بازنویسی کرد؟