آموزش ارثبری (Inheritance) در PHP به زبان ساده + مثالهای کاربردی
ارثبری (Inheritance) در PHP چیست؟
ارثبری یکی از پایهایترین و مهمترین مفاهیم برنامهنویسی شیءگرا (OOP) است. این مفهوم به ما اجازه میدهد یک کلاس جدید بر اساس یک کلاس موجود بسازیم. کلاس جدید تمام ویژگیها (Properties) و متدهای (Methods) عمومی و محافظتشده کلاس والد را به ارث میبرد.
با استفاده از ارثبری، شما دیگر نیازی به نوشتن مجدد کدهای تکراری ندارید. این اصل به عنوان قانون DRY (Don't Repeat Yourself) شناخته میشود و یکی از اصول کلیدی در نوشتن کدهای استاندارد و تمیز است.
چگونه از ارثبری در PHP استفاده کنیم؟ (کلمه کلیدی extends)
در زبان PHP، برای ارثبری از یک کلاس دیگر، از کلمه کلیدی extends استفاده میکنیم. کلاس اصلی را Parent Class (کلاس والد یا پایه) و کلاس جدید را Child Class (کلاس فرزند یا مشتق شده) مینامند.
در ادامه یک مثال ساده از پیادهسازی ارثبری در PHP را مشاهده میکنید:
class Vehicle {
public $brand;
public $color;
public function __construct($brand, $color) {
$this->brand = $brand;
$this->color = $color;
}
public function intro() {
return "This vehicle is a {$this->brand} and its color is {$this->color}.";
}
}
// کلاس Car از کلاس Vehicle ارثبری میکند
class Car extends Vehicle {
public $doors = 4;
public function message() {
return "I am a car!";
}
}
$myCar = new Car("Toyota", "Red");
echo $myCar->intro(); // خروجی: This vehicle is a Toyota and its color is Red.
سطوح دسترسی (Access Modifiers) در ارثبری
نقش سطوح دسترسی در ارثبری بسیار حیاتی است. سه نوع سطح دسترسی در PHP وجود دارد:
- public: از همه جا (داخل کلاس، کلاس فرزند و خارج از کلاس) قابل دسترسی است.
- protected: فقط در داخل خود کلاس و کلاسهای فرزند قابل دسترسی است و خارج از کلاس ارور میدهد.
- private: فقط و فقط در داخل همان کلاسی که تعریف شده قابل دسترسی است و کلاس فرزند به آن دسترسی ندارد.
class ParentClass {
public $publicVar = "عمومی";
protected $protectedVar = "محافظت شده";
private $privateVar = "خصوصی";
}
class ChildClass extends ParentClass {
public function showValues() {
echo $this->publicVar; // بدون مشکل کار میکند
echo $this->protectedVar; // بدون مشکل کار میکند
echo $this->privateVar; // خطا میدهد: تعریف نشده است
}
}
بازنویسی متدها (Method Overriding) و کلمه کلیدی parent
گاهی اوقات میخواهید رفتاری را که در کلاس والد تعریف شده، در کلاس فرزند تغییر دهید. به این کار Method Overriding یا بازنویسی متد گفته میشود. اگر بخواهید متد اصلی والد را حفظ کرده و فقط چیزی به آن اضافه کنید، میتوانید از کلمه کلیدی parent:: استفاده کنید.
class Employee {
protected $salary;
public function __construct($salary) {
$this->salary = $salary;
}
public function getDetails() {
return "حقوق پایه: " . $this->salary;
}
}
class Manager extends Employee {
private $bonus;
public function __construct($salary, $bonus) {
// فراخوانی متد سازنده کلاس والد
parent::__construct($salary);
$this->bonus = $bonus;
}
// بازنویسی متد کلاس والد
public function getDetails() {
return parent::getDetails() . " | پاداش: " . $this->bonus;
}
}
$manager = new Manager("5000", "1500");
echo $manager->getDetails(); // خروجی: حقوق پایه: 5000 | پاداش: 1500
جلوگیری از ارثبری با کلمه کلیدی final
اگر تمایل ندارید کلاسی توسط کلاسهای دیگر به ارث برده شود، یا میخواهید از بازنویسی یک متد خاص جلوگیری کنید، میتوانید از کلمه کلیدی final استفاده کنید.
final class SecureClass {
// این کلاس نمیتواند توسط کلاس دیگری extend شود
}
class NormalClass {
final public function secureMethod() {
// این متد در کلاس فرزند قابل Override نیست
}
}
نتیجهگیری
ارثبری یکی از ستونهای اصلی شیءگرایی است که با ساختاردهی منظم به کدها، خوانایی و قابلیت نگهداری پروژههای بزرگ PHP را تضمین میکند. استفاده مناسب از سطوح دسترسی protected و بهرهگیری از کلمه کلیدی parent دست شما را برای پیادهسازی الگوهای طراحی پیچیده و استاندارد باز نگه میدارد.
پرسش و پاسخ
نظری یافت نشد
برای ارسال نظر ابتدا وارد شوید