Override
override یا باز نویسی، یعنی اینکه ما کاری کنیم که متدهای کلاس پایه در داخل کلاس مشتق رفتار متفاوتی از خود نشان دهند. به عنوان مثال شما متد A را در کلاس A دارید و کلاس B از کلاس A ارث بری میکند، در این صورت متد A در کلاس B در دسترس خواهد بود. اما متد A دقیق همان متدی است که از کلاس A به ارث برده شده است. حال اگر بخواهید که این متد رفتار متفاوتی از خود نشان دهد چکار میکنید؟ Overriding یا بازنویسی این مشکل را برطرف میکند. به تکه کد زیر توجه کنید :
1: <?php 2: class Person 3: { 4: public function ShowMessage() 5: { 6: echo 'Message from Parent.'; 7: } 8: } 9: 10: class Child extends Person 11: { 12: public function ShowMessage() 13: { 14: parent::ShowMessage(); 15: echo '<br/>ShowMessage method was overrided !' ; 16: } 17: } 18: 19: $myPerson = new Person(); 20: $myChild = new Child(); 21: 22: $myPerson -> ShowMessage(); 23: echo '<br/><br/>'; 24: $myChild -> ShowMessage(); 25: ?>
Message from Parent. Message from Parent. ShowMessage method was overrided !
همانطور که در کد بالا مشاهده میکنید، یک متد به نام ShowMessage (خطوط 7-4) در کلاس Person تعریف شده است که یک پیغام چاپ میکند. حال میخواهیم این متد در کلاس Child علاوه بر این پیغام پیغام !ShowMessage method was overrided را نیز چاپ کند. برای این کار همانطور که مشاهده میکنید همین متد را در خطوط (16-12) و در داخل کلاس Child مینویسیم و سپس با استفاده از کلمه کلیدی parent و سپس دو نقطه (::) در خط 14 به PHP اعلام میکنیم که قصد استفاده از تمام کدهای بدنه همین متد در کلاس مادر را داریم بعلاوه اینکه در خط بعد از این دستور یعنی خط 15 کدهای اضافی را که قرار است این متد در کلاس فرزند یعنی Child داشته باشد مینویسیم. شاید این کار برای متدی به این سادگی زیاد کارا نباشد، اما اگر متد کلاس مادر دارای کدهای زیادی در بدنه خود باشد و شما بخواهید کد دیگری در کلاس فرزند به آن اضافه کنید استفاده از این روش کدنویسی را بهینه و سادهتر میکند.