دوره‌ای که می‌تونه مسیر شغلیت رو عوض کنه! دوره‌ای که می‌تونه مسیر شغلیت رو عوض کنه!
🎯 ثبت نام
بستن تبلیغات
دوره آموزش جامع PHP از صفر تا صد با پروژه‌های عملی

توی دوره رایگان PHP، هر چیزی که برای حرفه‌ای شدن نیاز داری رو یاد می‌گیری! از مفاهیم پایه تا پیشرفته، همراه با یه پروژه واقعی برای ساخت یه سایت مثل آپارات.

مشاهده بیشتر
دوره پروژه‌محور لاراول: ساخت وبسایت خبری از صفر تا صد

توی این دوره با هم یه وبسایت خبری واقعی رو از صفر می‌سازیم! از طراحی دیتابیس و احراز هویت تا ساخت API و یه پنل مدیریت حرفه‌ای، همه رو یاد می‌گیریم و آماده پروژه‌های واقعی میشی!

مشاهده بیشتر

آموزش چندریختی (Polymorphism) در PHP / استفاده ی کاربردی از مفهوم چندریختی در PHP شی گرا

آموزش چندریختی (Polymorphism) در PHP / استفاده ی کاربردی از مفهوم چندریختی در PHP شی گرا

در آموزش حاضر، به شرح مفهوم چندریختی یا به انگلیسی Polymorphism خواهیم پرداخت.

بر اساس اصل چندریختی، متدهایی که در کلاس های مختلف عملیات یکسانی را انجام می دهند، باید نام یکسانی هم داشته باشند. توسعه دهنده می تواند با بهره گیری از این اصل کد اپلیکیشن خود را به صورت منسجم و با قابلیت استفاده ی آسان تعریف کند.

یک مثال کاربردی کلاس هایی است که نمایانگر اشکال مختلف هندسی (نظیر مستطتیل، دایره و هشت گوشی) مختلف بوده که از نظر ظاهر، تعداد ضلع و همچنین فرمولی که مساحت بر اساس آن محاسبه می شود با یکدیگر فرق دارند. با این وجود تمامی این کلاس ها دارای یک ویژگی مشترک به نام مساحت هستند که باید محاسبه شود. اصل چندریختی بیان می دارد که در چنین شرایطی تمامی متدهایی که عملیات (یکسان) محاسبه ی مساحت شکل هندسی را انجام می دهند (مهم نیست برای کدام کلاس یا شکل هندسی) می بایست دارای اسمی یکسان باشند.

به طور مثال، می توانیم متدی که مساحت را محاسبه می کند calcArea() نام گذاری کرده و سپس در هر کلاسی که نمایانگر یک شکل هندسی است، متدی با همین اسم که عملیات محاسبه ی مساحت را با توجه به ظاهر شکل هندسی انجام می دهد پیاده سازی یا فراخوانی کنیم. حال هر زمان که می خواهیم مساحت اشکال هندسی مختلف را محاسبه کنیم، متدی به نام calcArea() را فراخوانی می کنیم. بدین وسیله دیگر لازم نیست نگران جزئیات فنی و پیاده سازی عملیات محاسبه ی مساحت اشکال هندسی مختلف باشیم. به عبارت ساده تر کافی است برای محاسبه ی مساحت شکل هندسی مورد نظر (خواه مستطیل باشد خواه دایره) یک متد واحد به نام calcArea() را صدا بزنیم.

شرح نحوه ی پیاده سازی اصل چندریختی (polymorphism)

به منظور پیاده سازی اصل چندریختی، می توانیم از کلاس های انتزاعی (abstract) یا interface ها یکی را انتخاب کنیم. به عبارت دیگر، برای اینکه مطمئن شویم کلاس های مشتق (فرزند) اصل چندریختی را پیاده سازی می کنند، می بایست بین کلاس های abstract یا interface ها یکی را انتخاب کنیم. در مثال زیر، interface هایی که shape نام گذاری شده اند، کلیه ی کلاس هایی که این interface را پیاده سازی می کنند مجاب به تعریف بدنه ی متدی به نام calcArea() می نمایند.

interface Shape {
  public function calcArea();
}

در مثال زیر، کلاس circle با تعریف بدنه و قرار دادن فرمول محسابه ی مساحت داخل ساختمان متد ()calcArea، مساحت شکل هندسی دایره را محاسبه کرده و در خروجی برمی گرداند.

class Circle implements Shape {
  private $radius;
  public function __construct($radius)
  {
    $this -> radius = $radius;
  }
  // calcArea calculates the area of circles 
  public function calcArea()
  {
    return $this -> radius * $this -> radius * pi();
  }
}

کلاس Rectangle در مثال زیر نیز اینترفیس Shape را پیاده سازی کرده و متد calcArea() را فراخوانی می کند، اما این بار منطق متد نام برده را طوری می نویسد که مساحت شکل هندسی مستطیل را محسابه نموده و در خروجی برگرداند.

class Rectangle implements Shape {
  private $width;
  private $height;
  public function __construct($width, $height)
  {
    $this -> width = $width;
    $this -> height = $height;
  }
  // calcArea calculates the area of rectangles   
  public function calcArea()
  {
    return $this -> width * $this -> height;
  }
}

اکنون می توانیم از روی کلاس های غیر انتزاعی نام برده، به صورت زیر نمونه سازی کنیم:

                        
$circ = new Circle(3);
$rect = new Rectangle(3,4);

بنابراین تا زمانی که کلاس های ما اینترفیس Shape را پیاده سازی می کنند، دو آبجکت فوق مساحت را با فراخوانی متدی که هم نام با caclArea() (اعلان شده در اینترفیس Shape) است، محاسبه نموده و در خروجی برمی گردانند، خواه این شکل هندسی مستطیل باشد و خواه دایره.

حال با فراخوانی متد calcArea() از آبجکت های $circ و $rect مساحت مستطیل و دایره محاسبه می شوند.

echo $circ -> calcArea();
echo $rect -> calcArea();

خروجی:

                        
28.274333882308
12
1396/03/12 3075 481
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...