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

شی گرایی در 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 رو برگردونه می شه در زمان فراخوانی با متد میشه مثل شی رفتار کرد. یعنی پس از این که از متد استفاده کردیم بلافاصله از همون متد به تمامی ویژگی ها و متد های کلاس دسترسی داشته باشیم و اون ها رو فراخوانی کنیم.

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

مطالب مشابه

هدر های Http در درخواست و پاسخ

Http Headers (قسمت دوم)

http headers حاوی اطلاعاتی در رابطه با نوع درخواست ما می باشند. همچنین یک نوع رابط میان درخواست کلاینت و پاسخ سرور در...

php error handling exceptions

مدیریت خطا و استثنا در php

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

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

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

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

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

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