قبل از شروع مثال و کدنویسی اجازه بدید تعریفی ساده از مفهوم ارث بری داشته باشیم.
وراثت در PHP چیست؟
وراثت همانند معنی آن در دنیای واقعی به ارث بردن مزایا و معایب از یک شخص یا یک شی می باشد.
در دنیای برنامه نویسی ما می توانیم کلاس های متلفی از اشیا رو به صورت مستقل ایجاد کنیم اما برای اینکه حجم کار ما به عنوان توسعه دهنده کاهش پیدا کنه و همچنین مدیریت پروژه آسان تر بشه میایم با استفاده از وراثت ویژگی هایی که مشترک هستند رو در قالب یک کلاس می نویسیم و پس از آن هر کلاس یا شی دیگری که به آن ویژگی ها نیاز داشته باشد تنها آنها را فراخوانی می کند.
به چه شکل؟
مثال ارث بری در PHP
مرحله به مرحله پیش میریم تا درک و یادگیری مطلب ساده تر باشه.
1) در این مثال من یک فایل به نام “Vehicle”که قرار است ویژگی های مشترک وسایل نقلیه را در خودش داشته باشد ایجاد می کنم، همانطور که می دانید یکی از ویژگی های مشترک همه وسایل نقلیه حرکت کردن هست، بنابراین متدی به نام move در این کلاس نیز به شکل زیر تعریف می کنم.
// Vehicle.php
name . 'Moved.';
}
}
2) حالا می خوام یه کلاس دیگه به نام Car ایجاد کنم که ویژگی move رو از کلاس Vehicle به ارث بببره و من نیاز نباشه دوباره اون رو در کلاسم ایجاد کنم و دوباره کاری بشه.
کلاس Car رو به شکل زیر ایجاد و ارث بری می کنم.
//Car.php
3) الان وارد فایل index.php پروژه خودم میشم و کلاس های نوشته شده رو به شکل زیر فراخوانی و مقداردهی می کنم.
//index.php
name = "Vehicle1";
$v->move();
$c = new Car();
$c->name = "car1";
$c->move();
// Result: Vehicle1Moved.car1Moved.
تمام! به همین راحتی می تونیم کلاس های متعددی ایجاد کنیم که از همدیگر ارث بری کنند.
نکات مهم:
* خصوصیات یا متدهای Private قابل ارث بری نیستند.
* متدی که از نوع final ایجاد شده باشد قابل ارث بری هست اما نمی توان ویژگی به ارث برده شده را تغییر داد.
* نوع های تعریف شده برای متغیرها یا ویژگی ها از طرف فرزندان قابل تغییر نیستند، به عنوان مثال متد یا متغیری که از سمت والد public تعریف شده است، فرزند قادر به تغییر آن به نوع private یا سایر نخواهد بود.
حالا سوال پیش میاد آیا می توانیم چیزی رو که به ارث بردیم تغییر بدیم؟ بله، در قسمت دوم این مقاله بهش می پردازیم.
چند ریختی در PHP
ما می توانیم مواردی که که به ارث می بریم تغییر دهیم، یک متد بسته به اینکه روی کلاس والد داره فراخوانی میشه یا روی کلاس فرزند، روش کارش تغییر میکنه.
در تعریف دیگر، یک متد خاص و واحد روی اشیاء مختلف رفتارش عوض میشه و فرزند میتونه رفتار والدش رو تغییر بده که به این فرایند چند ریختی گفته می شود.
به عنوان مثال در مثال ارث بری من می تونم کلاس car رو به شکل زیر بنویسم:
';
echo $this->name;
echo '';
}
}
در این مثال من علاوه بر دسترسی به خود parent می تونم متد move رو ارث بری کنم و به شکل دلخواه خودم ازش استفاده کنم که در اینجا تغییر رنگ هست.