جلسه سیزدهم PHP : آموزش شی گرایی در پی اچ پی (3)

خانه » مقالات اموزشی » php » جلسه سیزدهم PHP : آموزش شی گرایی در پی اچ پی (3)
جلسه سیزدهم PHP

نویسنده:

سجاد حسین زاده

Statistics-rafiki

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

3440

Calendar-amico (2)

تاریخ به‌روزرسانی:

۱۴۰۰-۰۹-۱۵

Work time-rafiki

زمان مطالعه:

14 دقیقه

جلسه سیزدهم PHP : آموزش کامل زبان برنامه نویسی پی اچ پی مقدماتی تا پیشرفته (جلسه سوم شی گرایی در پی اچ پی)

در این مقاله از آموزش PHP با جلسه سیزدهم PHP در خدمت شما هستیم. در قسمت قبل دومین جلسه‌ی شی گرایی را سپری کردیم و به مباحثی همچون توابع سازنده و مخرب، ارث بری، همپوشانی توابع و همچنین به تفاوت public ،private و protected در کلاس‌ها پرداختیم. در سومین جلسه از شی گرایی قصد داریم تا با بیان چند نکته مبحث شی گرایی (oop) را به اتمام برسانیم. توجه داشته باشید که مبحث شی گرایی را در 3 جلسه آموزش خواهیم داد. جلسه اول شی گرایی ، جلسه دوم شی گرایی ، جلسه سوم شی گرایی

فهرست مطالب
  1. ثابت‌ها در شی گرایی
  2. متدها و کلاس‌های abstract
  3. مفهوم interface
  4. متدها و ویژگی‌های static

ثابت ها (‌Constants)

یک ثابت به‌نوعی یک متغیر است، که می‌تواند مقداری را درون خود نگه دارد، اما همان‌طور که از اسم آن‌ها پیداست، ثابت‌ها تغییرناپذیر هستند. زمانی که ما یک‌بار آن را تعریف کنیم، آن ثابت تغییر نخواهد کرد. به مثال زیر توجه نمایید.

نکته 1: با توجه به مثال بالا از جلسه سیزدهم PHP در این کلاس، RequiredMargin یک ثابت است. که با کلمه کلیدی const اعلام می‌شود و تحت هیچ شرایطی آن را به هیچ‌چیز غیر از 1.7 تغییر نمی‌دهد. توجه داشته باشید که نام ثابت، پیشوند $ مشابه آنچه در مورد متغیرها به‌کار می‌رود، را ندارد.
نکته 2: ثابت‌ها case-sensitive هستند. یعنی به کوچکی و بزرگی حروف حساس هستند. پیشنهاد هم می‌شود که تمامی ثابت‌ها در کلاس‌ها با حروف بزرگ نوشته شوند.
نکته 3: با استفاده از علامت (::) می‌توانیم به ثابت‌ها، از خارج ِ کلاس، دسترسی داشته باشیم.
نکته 4: همچنین با استفاده از کلمه‌ی کلیدی ِ self نیز می‌توانیم در داخل ِ خود ِ کلاس به آن ثابت دسترسی داشته باشیم. به مثال زیر از جلسه سیزدهم PHP دقت کنید.

کلاس‌ها و متدهای abstract

کلاس‌های abstruct در php، کلاس‌هایی هستند که نمی‌توان از روی آن‌ها شی ایجاد کرد و تنها می‌توان از آن‌ها ارث بری کرد. این نوع از کلاس‌ها با کلمه کلیدی abstract اعلام می‌شوند. هنگام ارث بری از یک کلاس abstract همه متدهایی که در کلاس پدر با کلمه abstract نشان‌گذاری شده‌اند بایستی در کلاس فرزند تعریف شوند. حال به ساختار آن توجه نمایید.

نکته 1: همان‌طور که مشاهده می‌کنید، به دلیل وجود کلمه کلیدی ِ abstract قبل از ایجاد تابع، بدنه‌ی تابع وجود ندارد. درواقع یک تابع به وجود می‌آید اما چگونگی انجام کارها درون تابع نوشته نمی‌شود. بلکه باید جزییات تابع را خودمان زمان ارث بری تعریف کنیم.
نکته 2: درون کلاس‌های abstract، علاوه بر توابع abstract بدون بدنه‌ی تابع، می‌توانیم از توابع معمولی که بدنه‌ی تابع هم دارند استفاده کنیم. همچنین از توابع سازنده که در جلسه دوازدهم PHP هم با آن‌ها آشنا شدیم، می‌توانیم در اینجا استفاده کنیم.
نکته 3: همچنین استفاده از proprey ها با سطح دسترسی مختلف (visibility) بلامانع است.

به مثال زیر از جلسه سیزدهم PHP توجه نمایید.

نکته 1: همانطور که مشاهده می‌کنید یک کلاس abstract با نام Car ایجاد شده است. که در آن یک تابع سازنده نیز موجود است.
نکته 2: سه کلاس Audi،Volvo،Citroen از کلاس Car ارث بری کرده‌اند.
نکته 3: زمانی که در کلاس abstract یک تابع abstract ایجاد می‌شود، حتماً باید این تابع درون کلاس‌های فرزند مجدداً به‌کاربرده شود تا بدنه‌ی آن نیز تولید شود.
نکته 4: توجه داشته باشید که تعاریف تابع درون یک کلاس abstract نیز باید توسط کلمه کلیدی abstract پیش برود. همچنین داشتن توابع abstract درون یک کلاس غیر abstract صحیح نیست.
نکته 5: کلمه‌ی string در مقابل توابع abstract در مثال بالا در PHP نسخه 7 اضافه شده است. بیان‌گر این است که خروجی یک string خواهد بود.

مفهوم interface

جهت تعریف یک interface از کلیدواژه‌ی interface استفاده می‌کنیم. برای اینکه یک کلاس بتواند از interface ارث بری کند، لازم است از کلیدواژه‌ی implement استفاده شود. دستور استفاده از آن را در زیر مشاهده می‌کنید.

نکته 1: برای ساخت کلاس interface از کلمه‌ی کلیدی class استفاده نمی‌کنیم و فقط از interface استفاده می‌کنیم.
نکته 2: تمامی متدها در کلاس interface به‌اجبار باید public باشند.
نکته 3: interface ها تقریبا شبیه به abstract ها عمل می‌کنند. با این تفاوت که: توابع معمولی با بدنه ندارند. proprety ندارند. توابع سازنده ندارند. و فقط توابعی بدون بدنه دارند.
نکته 4: زمانی که یک کلاس از کلاس interface ارث بری می‌کند، باید تمامی متدهای آن را اجرا کند. درواقع خود ِ این متدها در کلاس اصلی، بدنه ندارد و بدنه‌ی آن در کلاس فرزند الزاماً باید نوشته شوند. به مثال زیر توجه نمایید.

نکته 1: در مثال بالا از آرایه و حلقه foreeach هم استفاده شد که به ترتیب این موارد را در جلسات چهارم و ششم PHP آموختیم.
نکته 2: یک کلاس می‌تواند چندین interface را implement کند. کافی‌است که از یک کاما استفاده شود. به مثال زیر توجه کنید.

نکته 1: همانطور که در مثال بالا مشاهده می‌کنید، شرط ِ انجام این کار تعریف توابع ِ تمامی interface ها در قسمت ِ بدنه‌ی کد می‌باشد.

متدها و ویژگی‌های ايستا (static)

کلمه کلیدی static در برنامه نویسی شی گرا اهمیت بسیار زیادی دارد. ما می‌توانیم با استفاده از proprety ها و متدهای ایستاتیک به‌صورت مستقیم و بدون ایجاد هرگونه شئ، از کلاس مربوطه، دسترسی پیدا کنیم. عناصر ایستا مشابه یک عضو سراسری برای کلاس عمل می‌کنند و تمام اشیاء ایجاد شده از آن کلاس می‌توانند به آن‌ها دسترسی پیدا کنند. به مثال زیر توجه نمایید.

خروجی کد بالا از جلسه سیزدهم PHP :

Welcome
Sajjad
Sajjad

نکته 1: در مثال بالا در کلاس human یک proprety و متد ایستا ایجاد شده است. در داخل حلقه‌ی کلاس برای دسترسی به خاصیت ایستا باید از کلمه::self استفاده کرد. اما در بیرون کلاس برای دسترسی به خاصیت‌های ایستا باید اینگونه عمل کرد. className::proprety or method name
نکته 2: شی های ایجادشده از کلاس استاتیک نمی‌توانند به proprety ها دسترسی داشته باشند. اما می‌توانند به متدها دسترسی داشته باشند.

تبریک میگم شما موفق شدید تا جلسه سیزدهم پی اچ پی ، مبحث ” شی گرایی در پی اچ پی (3) ” را پشت سر بگذارید.
با پایان این جلسه، شی گرایی در PHP به اتمام رسید. اگر سؤالی از این 3 جلسه دارید در قسمت کامنت ها مطرح کنید.

سجاد حسین زاده

سجاد حسین زاده

سجاد حسین زاده هستم متولد کرج, بنده از سال ۹۴ سابقه حضور در حوزه وب را دارم. و روزبه‌روز در حال رشد و ارتقای خودم تو این زمینه هستم. از علایقم که بخوام به گم: خب واضحه که عاشق کدنویسی هستم. و همچنین من از معدود افراد برنامه‌نویس ورزشکار هم به‌حساب میام.

تا کنون 264 نفر در کدپز ثبت نام کرده اند.

دیدگاهتان را بنویسید