تعداد بازدید: 612

شی گرایی در php (قسمت دوم)

مفاهیمی که در این مقاله در رابطه با شی گرایی در پی اچ پی بررسی می کنیم :

  •  inheritance
  • encapsulation (public , private , protected)
  • getters and setters
  • Method Chaining In PHP – Fluent Interface

وراثت یا inheritance

ارث بری یعنی ساخت کلاس جدید با استفاده از کلاس های موجود . به طور مثال در وردپرس ما کلاسی داریم تحت عنوان WP_Widget که ساختارش به گونه ای هست که یک ویدجت میسازه. خوب شما برای ساخت ویدجت جدید خودتون می تونید از این کلاس یک extends بسازید و توابع خاصی رو مجددن توش override کنید.

برای ساخت کلاس فرزند از کلمه کلیدی extends استفاده می کنیم.

کلاس والد (super class) :

کلاس فرزند (sub class) :

همونطور که می بینید :

  • در کلاس فرزند میشه method ها و Attribute های جدیدی داشته باشیم.
  • در کلاس فرزند میشه method های کلاس والد رو override کرد.
  • در کلاس فرزند ما به تمامی المان های کلاس والد (به شرط سطح دسترسی public , protected) دسترسی کامل داریم.(برای استفاده در ساختار های درونی کلاس و الا در زمان ساخت شی دقیقا همون ساختار والد به همراه ساختار های جدید در کلاس فرزند به وجود میاد).
  • مهم : در کلاس فرزند با استفاده از کلمه کلیدی parent:: می تونیم به المان های والد نظیر متدها دسترسی داشته باشیم (در مثال مشاهده فرمودید).

کلمه کلیدی final : اگر قبل از کلاس کلمه کلیدی final رو بیارید اون کلاس دیگه عقیم میشه . یعنی دیگه نمیشه از روش کلاس دومی رو درست کرد.

کپسوله سازی (encapsulation)

کپسول آموکسی سیلین رو در نظر بگیرید ، تشکیل شده از پودر های مختلف . اگر داروخانه به شما تمامی پودر ها رو بده و بگه مصرف کن (خب خیلی بده). برای بهتر شدن روال کار دارساز پودر ها رو در یک کپسول قرار میده و به شما تحویل میده . خوب شما فارغ از این که این کپسول از چه چیزهایی تشکیل شده اون رو مصرف می کنید.

مبحث کپسوله سازی در پی اچ پی یعنی شما بیاید و یه سری موارد که نیازی نیست رو از دید کاربر مخفی کنید.(حداقل دسترسی رو به کاربر بدید).

خوب توی مثال بالا پودرهای کپسول آموکسی سیلین میشه متدهای (spark_pluged و engin_on و turn_wheel) و خود کپسول میشه متد start . پس کاربر بدون نیاز به دونستن نحوه روشن شدن ماشین با متد start ماشین رو روشن میکنه.

ساختار سطوح دسترسی برای کپسوله سازی به شکل زیر است :

 سطح دسترسی داخل کلاس کلاس های فرزند خارج کلاس
public true true true
protected true true false
private true false false

getters and setters

ممکنه برای تغییر مواردی که سطح دسترسی در اون ها امکان پذیر نیست (حال چه private یا protected) متدهایی رو داخل کلاس تعریف کنیم که به اون ها getters , setters می گیم.

نکته : خود متد سازنده (constructor) هم میتونه یه setters باشه . (قطعا getters نیست چون سازنده چیزی رو بر نمی گردونه).

Method Chaining In PHP – Fluent Interface

اگر متد مربوطه (getter یا setter یا هرنوع متد دیگری) پس از انجام عملیات خودش شی this رو برگردونه می شه در زمان فراخوانی با متد میشه مثل شی رفتار کرد. یعنی پس از این که از متد استفاده کردیم بلافاصله از همون متد به تمامی ویژگی ها و متد های کلاس دسترسی داشته باشیم و اون ها رو فراخوانی کنیم.

زنجیر کردن متد ها یک راه حل خوب برای متدهایی هستند که از نظر منطقی به هم وابسته اند. مثلا شی جاری دو عملیات پشت سر هم روش توسط دو متد انجام بشه.

مطالب مشابه

رابط mysqli , pdo

رابط mysqli و PDO

عموما DBMS ها یک رابط Command line برای دستکاری پایگاه داده در اختیار کاربر قرار می دهند. همانند تمامی پروتکل های...

معماری های MVC/HMVC

معماری MVC یک قالب برای پیاده سازی رفتار نرم افزار می باشد که بر پایه Model و Controller و View می باشد. controller...

عبارات منظم یا عبارات باقاعده

عبارات منظم RegularExpression

در این قسمت قصدداریم تا با یکی از مباحث پیشرفته یعنی عبارات منظم یا عبارات باقاعده (regular expression) آشنا بشیم....

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای شی گرایی در php (قسمت دوم)

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *