وراثت یا به اصطلاح 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();
نمایش اطلاعات کامل ماشین شامل رنگ، سرعت و نوع دنده.