مفهوم شی گرایی (OOPs) درPHP

یکشنبه 2 اسفند 1394

OOps مخفف عبارت Object Oriented Programming Structure بوده و به معنای ساختار برنامه نویسی شیئ گرا می باشد. تا کنون در مقالات گذشته مفهوم شیئ گرایی را در دات نت مورد بررسی قرار داده ایم، در این مقاله می خواهیم OOPs را در PHP مورد بررسی قرار دهیم.

مفهوم شی گرایی (OOPs) درPHP

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

برای نمونه یک تلویزیون را مثال می زنیم؛ تلوزیون یک شیئ است که خصوصیت ها و رفتارهایی دارد. به همین شکل اشیاء مختلف خصوصیت ها و رفتارهای مربوط به خود را دارند. 

خصوصیت های تلویزیون: اندازه صفحه، برند تجاری، رنگ و...

رفتار تلویزیون: صدای بلند، صدای آرام، روشن و خاموش شدن و ...

به همین روال اگر در مورد OOPs در PHP صحبت کنیم، می توانیم بگوییم که یک شیئ متغیرهایی دارد که به عنوان خصوصیت و توابعی دارد که به عنوان behavior یا رفتار آن شناخته می شود.

مراحل استفاده از تابع(function)

1. تعریف یک کلاس

2. ایجاد خصوصیت ها(Attributes) برای مثال؛متغیرها

3. سپس اضافه کردن رفتارها برای مثال توابع(functions)

4. و در آخر فراخوانی تابع

 

 

نگاهی به  نحوه نوشتن کد PHP در بالا بیاندازید.

در اینجا ما تمام مراحل مورد نیاز برای استفاده از تابع را بررسی کرده ایم. 

ابتدا یک کلاس ایجاد کردیم و نام آن را TV قرار دادیم. برای تعریف هر نوع کلاس، کلمه کلیدی class  قبل از نام کلاس استفاده می شود.

مرحله دوم ایجاد خصوصیت ها یا متغیرها می باشد. در این جا سه خصوصیت یا Property تعریف کرده ایم: رنگ، صدا و مدل تلویزیون و مقادیر پیش فرض آن را قرمز، 2 و sony قرار داده ایم.

مرحله سوم اضافه کردن رفتارها یا توابع می باشد. برای اضافه کردن هر نوع تابعی باید از کلمه کلیدی Function قبل از نام تابع قرار دهیم. در اینجا ما دو تابع volumeUp  و volumeDown را استفاده کرده ایم.

توجه: $this به یک شیئ مشخص در کلاس اشاره می کند. در اینجا شیئ مشخص TV می باشد.

مرحله قبل برای فراخوانی یک تابع است که ایجاد شده است. برای فراخوانی تابع باید یک شیئ ایجاد کنید. در این syntax همانطور که می بینید ما دو Object  ایجاد کرده ایم و آن ها را در دو متغیر به صورت $tv_one و $tv_two ذخیره کرده ایم.

سازنده function

در PHP5 یک تابع جدید اضافه شده است که Constructor function نامیده می شود( همچنین تابع magic  نیز نامیده می شود).

اجازه دهید ببینیم چگونه می توان این Constructor function را استفاده کرد. Magic function ها در PHP با نوشتن دو علامت underscore  (__) شروع می شوند. در انجا ما نیازی نداریم constructor function را فراخوانی کنیم، هر زمان که یک شیئ جدید ایجاد شود constructor function به طور خودکار فراخوانی می شود.

 

همانطور که در کد بالا مشاهده کردید، یک تابع دیگر نیز اضافه کرده ایم. این تابع یک constructor function را فراخوانی می کند و با دو علامت underscore  تعریف شده است. در اینجا ما سه پارامتر گرفته ایم و متغیرهایی تعریف کرده ایم به طور مثال $m, $v, $c. 

سپس مقادیر را به متغییرها اختصاص داده ایم. بعد از اینها یک شیئ جدید با تمام پارامترهای مربوطه را ایجاد کرده ایم و مقداری که ما می خواهیم دریافت کنیم را در خروجی تکرار می کند.

وراثت

در OOP وراثت به این مفهوم است که وقتی یک کلاس از اشیاء تعریف شده است می توان هر نوع زیر کلاسی از آن را تعریف کرد که یک یا چند Property از کلاس والد را به ارث ببرند. این ویژگی از برنامه نویسی شیئ گرا به توسعه سریع برنامه کمک می کند.

 

در کد بالا ما از یک کلاس فرزند استفاده کرده ایم. در تعریف کلاس فرزند ما از یک کلمه کلیدی اضافی قبل از کلاس والد استفاده می کنیم که نشان می دهد کدام کلاس فرزند ساخته شده است. سپس شما می توانید متغیرهایی که لازم دارید را اضافه کنید. در مورد مثال بالا ما دو کلاس فرزند با نام های timer و plazma را به ترتیب ایجاد کرده ایم. این کار برای اضافه کردن ویژگی های اضافی به کلاس اصلی می باشد. این عمل به استفاده مجدد از کد کمک می کند. بنابراین ارث بری مفهوم مهمی در OOPS می باشد.

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

این تنها یک فرایند برای تعیین دسترسی به متغیرها و توابع عضو می باشد. ما سطوح دسترسی را برای متغیرها و توابع عضو از جایی تنظیم کرده ایم که  باید به آن دسترسی داشته باشیم. در OOPS می توانیم به هر نوع متغییر و تابعی از سه مکان دسترسی داشته باشیم،

1. در کلاس 

2. دسترسی از طریق آبجکت

3. از طریق کلاس فرزند

 سه سطح دسترسی وجود دارد:

Public
Private
Protected

 

توابع Getter  و Setter 

هر زمان که سطح دسترسی به صورت private تنظیم می شود برای نمایش هر نوع داده باید یک getter و setter  ایجاد کرد.

با انجام این کار می توانیم فقط داده ها را بخوانیم.

 

تابع Getter  فقط برای مقدار برگشتی داده استفاده می شود. کلاس جدید همچنین باید در یک کلاس( Private) ایجاد شود. درکد بالا ما مشاهده می کنیم که کلمه کلیدی Public نیز در کنار تابع استفاده می شود. این Public فقط برای انتساب سطح دسترس تابع به کار می رود. به طور پیش فرض سطح دسترسی تابع به صورت public می باشد اما نوشتن آن به شما کمک می کند که کد بعد از آن را بهتر درک کنید. بنابراین شما باید سطح دسترسی را قبل از تابع یا متغیرها تعیین کنید. برای بدست آوردن اطلاعات از مدل دسترسی private باید فقط تابع getter را فراخوانی کنیم.

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

Abstraction یا انتزاع

Abstract  به معنای چیزی است که هنوز کامل نشده است. Abstraction نیز یک ویژگی مهم دیگر از برنامه نویسی شیئ گرا می باشد. در اینجا تابع اعلان شده اما پیاده سازی نشده است.

در کد زیر ما یک کلاس abstract با نام baseEmployee ایجاد کرده ایم و آن را به عنوان کلاس والد در نظر گرفته ایم. در اینجا یک تابع در کلاس والد ایجاد کرده ایم. ما  یک کلاس abstract در کلاس والد با نام () getmonthlysalary ایجاد کرده ایم. کلاس Abstract فقط میتواند اعلان شود اما پیاده سازی نشده  است. شما می توانید آن را در هر نقطه از کلاس ایجاد شده پیاده سازی کنید. کلاس abstract ایجاد شده باید حداقل یک بار در هر کلاس گنجانده شود. بعد از آن شما می توانید از توابع و رفتارهای دیگر هم استفاده کنید.

 

متدها و متغییرهای استاتیک

ما می دانیم که تمام توابع و متغیرها به اشیاء مرتبط هستند. اما در اینجا در مورد توابع و متغیرهای استاتیک اینطور نیست.

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

به عنوان مثال :

/*public static $data; */static variable

/*Public static xyz(); */static function

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

مثال :  */abc::xyz(); */calling a function
abc::$data

در اینجا کلمه کلیدی $this برای اشاره به شیئ استفاده نشده است. نگاهی به کد بیاندازید. این مفهوم برای شما واضح تر می شود.

 

در اینجا از $this در تابع ، و از کلمه کلیدی self در استاتیک استفاده می کنیم. 

 

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • PHP
  • 3k بازدید
  • 3 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید