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

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

نویسنده:

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

Statistics-rafiki

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

2163

Calendar-amico (2)

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

۱۴۰۰-۰۹-۱۵

Work time-rafiki

زمان مطالعه:

13 دقیقه

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

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

فهرست مطالب
  1. تابع سازنده
  2. تابع مخرب
  3. همپوشانی توابع
  4. سطح دسترسی متغیرها
    4.1. Public
    4.2. Private
    4.3. Protected

تابع سازنده

توابع سازنده نوع خاصی از توابع هستند که به‌طور خودکار هر زمان که یک شی ایجاد می‌شود، فراخوانی می‌شوند. ما می‌توانیم با بهره‌گیری مزیت این حالت برای مقداردهی اولیه به متغیرها و یا انجام عملیاتی خاص استفاده کنیم. PHP یک تابع خاص به نام ()construct__ برای تعریف توابع سازنده فراهم می‌کند. که ما می‌توانیم به تعداد دلخواه آرگومان‌‌ها را به تابع سازنده منتقل کنیم. با توجه به مثال زیر از جلسه دوازدهم PHP تابع سازنده‌ای برای کلاس Books ایجاد خواهد شد. که مقادیر price و title در زمان ایجاد شی مقداردهی می‌شود.

حال برای مقداردهی price و title نیازی به فراخوانی توابع مجزا نداریم. ما می‌توانیم 2 متغیر عضو را در زمان ایجاد شی مقداردهی کنیم. مثال زیر را بررسی کنید.

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

construct functions in oop php
construct functions in oop php

تابع مخرب

همانند تابع سازنده ما می‌توانیم یک تابع مخرب با استفاده از ()destruct__ تعریف کنیم. با استفاده از این تابع می‌توانیم یک سری دستورها یا کدها را به هنگام تمام شدن پردازش یک کلاس اجرا کنیم. به مثال زیر توجه کنید.

ارث بری

کلاس‌ها می‌توانند method ها و properity های کلاس‌های دیگر را ارث بری کنند. کلاسی که ارث بری شده است را subclass می‌نامند. و همچنین کلاسی که از آن ارث بری شده است را parent class می‌نامند. برای ارث بری از یک کلاس دیگر باید از کلمه‌ی کلیدی extends استفاده کنیم. کلاسی که ارث بری می‌کند، به‌طور خودکار همه ویژگی‌هایی که در کلاس پدر وجود دارد را دارا می‌باشد. به مثال زیر توجه کنید. مثال زیر از کلاس Animal ارث بری کرده است.

همپوشانی توابع

تعاریف تابع در کلاس‌های فرزند، توابع را با نام‌های مشابه در کلاس‌های پدر همپوشانی می‌کنند. در یک کلاس فرزند، ما می‌توانیم تعاریف تابع ارث برده شده از کلاس پدر را تغییر دهیم. در مثال زیر توابع getPrice و getTitle همپوشانی شده‌اند تا مقادیری را برگردانند.

سطح دسترسی متغیرها (visibility)

ما برای دسترسی به هر متغیر، متد و یا proprety در کلاس می‌توانیم سطح دسترسی و یا همان visibility تعریف کنیم. تا به اینجای کار ما تنها از کلمه کلیدی public برای تعریف method ها و proprety ها استفاده می‌کردیم. اما 2 کلمه‌ی کلیدی دیگر تحت عنوان protected و private نیز وجود دارد.

تفاوت بین public ، private و protected در کلاس‌ها چیست؟

این سه کلمه کلیدی جهت مشخص کردن سطح دسترسی اجزای یک کلاس به‌کار می‌روند. هنگامی‌که یک کلاس به همراه اجزای درونی مانند: متغیرها و توابع ایجاد می‌شود می‌توان به سه حالت به آنها دسترسی داشت. عکس زیر از جلسه دوازدهم PHP، به‌صورت خلاصه تفاوت بین public، private و protected را به ما نشان می‌دهد.

php oop visibility
php oop visibility

Public (عمومی)

در این نوع از دسترسی، متغیر یا تابع در کلاس‌های دیگر که ارث بری شده‌اند و object های ایجادشده از کلاس قابل‌دسترسی است. تا به اینجا تمامی مثال‌هایمان با public بوده است. درصورتی‌که نیاز به محدود کردن دسترسی به بخش‌های مختلف کلاس را داشته باشیم، باید از private (خصوصی) و یا protected (محافظت‌شده) استفاده کنیم.

Protected (محافظت شده)

در این نوع از دسترسی، proprety یا تابع، در کلاسی که در آن تعریف‌شده و کلاس‌هایی که از این کلاس ارث بری کرده‌اند، قابل‌دسترسی است اما در object هایی که از کلاس ساخته می‌شود، این توابع و متغیرها قابل‌دسترسی نخواهند بود. یک عضو کلاس می‌تواند با استفاده از کلمه کلیدی protected قبل از نام آن prtotected شود. با توجه به ساختار زیر از جلسه دوازدهم PHP نمونه‌ای متفاوت از کلاس MyClass را می‌بینید.

Private (خصوصی)

در این نوع از دسترسی، proprety یا تابع فقط در کلاسی که در آن تعریف‌شده است قابل‌دسترسی است. و در کلاسی که به ارث برده می‌شود و همچنی در شی هایی که از کلاس ساخته می‌شوند، قابل‌دسترسی نیستند. یک عضو کلاس می‌تواند با استفاده از کلمه کلیدی private قبل از اسم عضو، خصوصی شود. ساختار زیر از جلسه دوازدهم PHP را ملاحظه نمایید.

توجه داشته باشید در مثال بالا، زمانی که کلاس MyClass توسط کلاس دیگری ارث بری شود، ()myPublicFunction و همچنین متغیر $driver قابل‌مشاهده هستند. اما کلاس ارث بری شده هیچ دسترسی‌ای به ()myPrivateFunction و همچنین متغیر car$ نخواهند داشت. زیرا آن‌ها private هستند.

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

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

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

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

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

4 Comments

Join the discussion and tell us your opinion.

  • سلام خسته نباشید
    وقتی از دستور construct برای تابعم استفاده میکنم دستور getprice و gettitle رو تعریف نمیشه کرد و اروور میده
    راه حل چیه

    • سلام . با اجازه ی جناب جناب حسین زاده ؛
      زمانی که طبق مثال ، تابعی با نام construct__ ایجاد میکنید و به اون تابع دو پارامتر (یعنی part1 و part2) میدید و درون تابع ، هر آرگومان رو به یکی از متغیر های کلاس ( یعنی price و title ) نسبت میدید ، موقعیتی رو فراهم کردید که بتونیم از بیرون از کلاس ، با تعریف یک شیء و بعد با فراخوانی تابع برای اون شیء و دادن مقدار برای آرگومان ها ، به اشیاء خودمون ، مقدار دهی کنیم .
      برای ادامه ی کار میتونیم درون کلاس یه تابع با عنوانی که خودمون میخوایم ایجاد کنیم و به تابع دستور بدیم که برای ما ، مقادیری که تابع قبلی ، از هر شی به عنوان آرگومان گرفت رو چاپ کنه . نام دلخواهی که به تابعمون میدیم در واقع همون کلمات getprice و gerTitle مثال جلسه قبل هستند که خب طبیعتا اینجا بی استفاده اند .
      برای نمونه این لینک رو ببینید نمونه ایه که الان مینویسم براتون :

      https://i.postimg.cc/qqVdS2Q2/Untitled.jpg

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