وراثت یکی از اصول مهم برنامهنویسی شیءگرا است که به برنامهنویسان امکان میدهد کلاسهای جدید را بر اساس کلاسهای موجود تعریف کرده و ویژگیها و متدهای مشترک را به ارث ببرند. وراثت از مفاهیم کلیدی در PHP و سایر زبانهای برنامهنویسی شیءگرا میباشد و به برنامهنویسان این امکان را میدهد تا کدهای تکراری را به حداقل برسانند و ساختار منطقی و سلسله مراتبی در برنامههای خود ایجاد کنند. در این مقاله، ما به مفاهیم و کاربردهای ارث بری در PHP خواهیم پرداخت و نحوه تعریف کلاسهای مشتق و ارثبری شده را مورد بررسی قرار میدهیم. همچنین پیشنهاد میکنیم آموزش شی گرایی در PHP را نیز مطالعه نمایید.
مفاهیم پایه ارث بری در PHP
1. کلاس پایه (Base Class) و کلاس مشتق (Derived Class)
در وراثت، دو نوع کلاس وجود دارد: کلاس پایه (Base Class) و کلاس مشتق (Derived Class). کلاس پایه کلاس اصلی است که ویژگیها و متدهای مشترک را تعریف میکند. کلاس مشتق از کلاس پایه، ارث میبرد و میتواند ویژگیها و متدهای ارثبری شده را بهرهبرداری و تغییر دهد یا ویژگیها و متدهای جدیدی را اضافه کند.
2. ویژگیها و متدها
وراثت معمولاً ویژگیها (Properties) و متدها (Methods) را به ارث میبرد.ویژگیهای دادهای یا ویژگیها به هر شیء از یک کلاس اختصاص مییابد. متدها توابع یا عملیاتهایی هستند که بر روی دادهها انجام میدهند.
3. ارثبری (Inheritance)
وراثت به معنای ارث بری از یک کلاس پایه به کلاس مشتق است. کلاس مشتق تمام ویژگیها و متدهای کلاس پایه را به ارث میبرد و میتواند آنها را بهرهبرداری و تغییر دهد. ارثبری به ارتباط بین کلاسها نیز اطلاق میشود.
تعریف کلاسها در وراثت
در PHP، برای تعریف کلاسها از کلمهی کلیدی class
استفاده میشود. برای تعریف کلاس مشتق از کلاس پایه، از کلمهی کلیدی extends
استفاده میشود. به عنوان مثال:
// تعریف کلاس پایه
class Animal {
public $name;
public function eat() {
echo "$this->name is eating.";
}
}
// تعریف کلاس مشتق
class Cat extends Animal {
public function meow() {
echo "Meow!";
}
}
در این مثال، ما دو کلاس تعریف کردهایم. کلاس “Animal” کلاس پایه است و ویژگی “name” و متد “eat” را تعریف میکند. کلاس “Cat” از کلاس “Animal” ارث میبرد و ویژگیها و متدهای کلاس “Animal” را بهرهبرداری میکند. همچنین، کلاس “Cat” متد جدیدی به نام “meow” را اضافه میکند.
دسترسی به ویژگیها و متدها
در کلاس مشتق، شما میتوانید به ویژگیها و متدهای کلاس پایه و همچنین ویژگیها و متدهای جدید کلاس مشتق دسترسی داشته باشید. به عنوان مثال:
$cat = new Cat();
$cat->name = "Whiskers"; // دسترسی به ویژگی ارثبری شده
$cat->eat(); // دسترسی به متد ارثبری شده
$cat->meow(); // دسترسی به متد جدید
در اینجا، ما یک شیء از کلاس “Cat” ایجاد کردهایم و به ویژگی “name” و متد “eat” کلاس پایه دسترسی داریم. همچنین، با استفاده از متد “meow” کلاس مشتق، میتوانیم رفتار مختص به خود را اجرا کنیم.
Overriding (تغییر تعریف)
وقتی یک کلاس مشتق از کلاس پایه ارث بری میکند، امکان دارد که تعریف یک متد از کلاس پایه را تغییر دهد. این عمل به عنوان “تغییر تعریف” یا “Overriding” شناخته میشود. در این صورت، متد تعریف شده در کلاس مشتق با نام مشابه در کلاس پایه جایگزین میشود.
// تعریف کلاس پایه
class ParentClass {
public function showMessage() {
echo "Hello from ParentClass!";
}
}
// تعریف کلاس مشتق با تغییر تعریف متد
class ChildClass extends ParentClass {
public function showMessage() {
echo "Hello from ChildClass!";
}
}
در این مثال، کلاس “ChildClass” از کلاس “ParentClass” ارث برده و متد “showMessage” را با تغییر تعریف جایگزین کرده است. حالا وقتی یک شیء از کلاس “ChildClass” ایجاد میشود و متد “showMessage” فراخوانی میشود، پیام “Hello from ChildClass!” نمایش داده میشود.
فواید وراثت
ارث بری در PHP مزایای زیادی دارد که به برنامهنویسان کمک میکند کدهای بهتر و منظمتری بنویسند:
1. اشتراک کد: با استفاده از وراثت، میتوان کد مشترک در کلاس پایه قرار داد و از چند کلاس مشتق از آن استفاده کرد. این کار کاهش تکرار کد و افزایش قابلیت استفاده مجدد آن را فراهم میکند.
2. افزایش خوانایی: وراثت میتواند به خوانایی کد کمک کند. زمانی که یک کلاس مشتق از یک کلاس پایه ارث بری میکند، برنامهنویسان میتوانند از نامگذاری منطقی و سلسله مراتبی برای کلاسها استفاده کنند.
3. تغییرات سادهتر: اگر نیاز به اصلاح یک ویژگی یا متد در کلاسهای پایه باشد، این تغییر به تمام کلاسهای مشتق اعمال میشود. این به معنای کاهش زمان و هزینه تغییرات است.
محدودیتها و نکات مرتبط
وراثت یک مفهوم مفید است، اما باید موارد زیر را در نظر داشت:
1. PHP از ارثبری چندگانه پشتیبانی میکند، اما شما نمتوانید از تنها یک کلاس پایه ارث ببرید. این به این معناست که شما نمیتوانید از چند کلاس پایه به صورت همزمان ارث ببرید. اگر نیاز به ارث بری از چند کلاس پایه دارید، باید از رابطها (Interfaces) استفاده کنید.
2. تغییر تعریف (Overriding) متدها باید با متدهای کلاس پایه سازگار باشد. این به این معناست که تعداد و نوع پارامترها و نوع مقدار بازگشتی متدها باید مطابقت داشته باشند. اگر متدی در کلاس مشتق تغییر تعریف شود و با مشخصات متد اصلی تفاوت داشته باشد، این به خطای منطقی و اجرایی منجر میشود
مثال عملی
یک مثال عملی از وراثت در PHP می تواند به شکل یک سلسله مراتب از کلاسها باشد. فرض کنید ما یک سلسله مراتب از کلاسهای مرتبط با حیوانات داریم:
// تعریف کلاس پایه
class Animal {
public $name;
public function __construct($name) {
$this->name = $name;
}
public function eat() {
echo "$this->name is eating.";
}
}
// تعریف کلاس مشتق برای پرندگان
class Bird extends Animal {
public function fly() {
echo "$this->name is flying.";
}
}
// تعریف کلاس مشتق برای ماهیها
class Fish extends Animal {
public function swim() {
echo "$this->name is swimming.";
}
}
// ایجاد شیءهای مشتق
$eagle = new Bird("Eagle");
$shark = new Fish("Shark");
$eagle->fly(); // نمایش: Eagle is flying.
$shark->swim(); // نمایش: Shark is swimming.
در این مثال، ما از کلاس پایه “Animal” شروع کردهایم که ویژگی “name” و متد “eat” را دارد. سپس دو کلاس مشتق “Bird” و “Fish” را ایجاد کردهایم که از کلاس “Animal” ارث بردهاند و متدهای خاص به خود را اضافه کردهاند. در نهایت، ما دو شیء از این دو کلاس مشتق ایجاد کردهایم و از متدهای ارث بری شده و متدهای جدید استفاده کردهایم.
خلاصه ارث بری در PHP
وراثت یکی از مهمترین مفاهیم در برنامهنویسی شیءگرا است که به برنامهنویسان این امکان را میدهد تا کدهای تکراری را کاهش دهند، کدهای قابل استفاده مجدد بنویسند و ساختار منطقی در برنامههای خود ایجاد کنند. وراثت به برنامهنویسان امکان میدهد کلاسهای مشتق از کلاسهای پایه ایجاد کنند و متدها و ویژگیها را بهرهبرداری و تغییر دهند. این اصل از پویایی به برنامهها اضافه میکند و کدهایتان را بهبود میبخشد.
با توجه به مفاهیم و کاربردهای وراثت، شما میتوانید به بهبود ساختار کد، افزایش قابلیت استفاده مجدد کدها و کاهش تکرار کد پردازید. این اصول را در توسعه نرمافزارهای پیچیده و بزرگ میتوانید به خوبی بهرهبرداری کنید