آموزش PHP: جلسه بیست و سوم: شیءگرایی (بخش سوم)
در دو جلسهی قبلی ۱۱ مرحله مختلف را گذراندیم تا مبحث شیءگرایی را در پیاچپی به روش عملی یاد بگیریم. در ادامه به سراغ مراحل بعدی میرویم.
مرحله دوازدهم:
دسترسی مستقیم به پروپرتیها (توصیه نمیشود)
برای دسترسی مستقیم به خواص اشیاء ساخته شده در پیاچپی، نیازی به استفاده از متدها ندارید. شما میتوانید به طور مستقیم با استفاده از عملگر <- و نام متغیر (پروپرتی) مورد نظر، به آن دسترسی داشته باشید.
به عنوان مثال اگر در کلاس پیاچپی نوشته شدهی خود، یک پروپرتی به نام name$ (در شیء mojtaba$) داشته باشید، برای دسترسی به مقدار این متغیر باید از کدی مثل زیر استفاده کنید:
البته همانطور که اشاره کردیم، استفاده از این روش پیشنهاد نمیشود چراکه امکان دارد در ادامه مسیر، با مشکلاتی مواجه شوید. برای دسترسی به مقادیر متغیرها (پروپرتیها) در یک کلاس پیاچپی، بهتر است از متدهای دریافتکننده یا همان Getter استفاده کنید.
به کد زیر توجه کنید تا آنچه گفته شد را بیشتر درک کنید.
مرحله سیزدهم:
کانستراکتورها (constructor)
در تمامی کلاسهای پیاچپی میتوان متدهایی موسوم به کانستراکتور را تعریف کرد که در واقع یک متد داخلی آن کلاس محسوب میشود. کانستراکتورها به شما اجازه میدهند تا خواص مورد نظر کلاس خود را تعریف کنید. بدین طریق به محض ساختن و فراخوانی چنین کلاسی، متد کانستراکتور آن کلاس به صورت خودکار اجرا خواهد شد.
نکته: اگر تابعی به نام ()constructــ در کلاس مورد نظرتان بسازید، پیاچپی به طور خودکار متد (تابع) ()constructــ را پس از ساختن هر شیء و در واقع پس از اجرای کلاس، فراخوانی میکند.
به یاد داشته باشید که برای تعریف کانستراکتور در ابتدای نام آن باید دو علامت آندراسکور (آندرلاین ــ) قرار دهید و بدون هیچ فاصله یا کاراکتر اضافهای، کلمهی construct را در ادامهی نام آن بنویسید. برای درک بیشتر موضوع، به کد زیر توجه کنید:
از حالا به بعد به منظور پیشبرد راحتتر و یکپارچهتر مبحث شیءگرایی در پیاچپی، هر جا صجبت از متد شد منظور ما تابع داخل کلاس اس و هرجا از پروپرتیها سخن گفتیم، منظور ما همان متغیرهای کلاس هستند.
از آنجا که قصد داریم شیءگرایی را به شما آموزش دهیم پس از همین حالا به بعد از واژگان این ساختار برنامهنویسی استفاده خواهیم کرد.
مرحله چهاردهم:
ساختن یک کلاس (شیء) مجهز به کانستراکتور
حالا که ما با نحوهی ساختن کانستراکتور آشنا شدهایم، میتوانیم برای ساخت کلاس person، مقداری را به عنوان پیشفرض برای پروپرتی name$ مشخص کنیم.
شما میتوانید ورودیهای مختلفی را به صورت آرگومان، برای متد کانستراکتور تعیین کنید. اگر با این موضوع آشنایی ندارید بد نیست سری به بخش آموزش توابع در پیاچپی بزنید که پیشتر آن را در زومیت منتشر کردهایم. برای افزودن ورودی به کانستراکتور، باید پس از استفاده از یک شیء ورودیها را در داخل پرانتز و پس از نام کلاس مورد نظر، وارد کنیم. به عنوان مثال به کد زیر توجه کنید:
استفاده از کانستراکتور و مقدار دهی ورودی مورد نیاز آن باعث شد تا دیگر نیازی به فراخوانی متد ()set_name نخواهیم داشت که همین کار باعث میشود با نوشتن کد کمتر، بتوان پروژههای مسنجمتری را ساخت. استفاده از کانستراکتورها همانند سایر زبانها نظیر جاوا و ... در بین برنامهنویسان این زبان، رایج است. باز هم توجه شما را به مثال زیر جلب میکنیم:
مرحله پانزدهم:
محدود کردن دسترسی به پروپرتیها با اصلاحکنندههای دسترسی
یکی از اصول بنیادی در برنامهنویسی شیءگرا، کپسولهسازی (encapsulation) است. اگر قصد دارید تا دسترسی به پروپرتیهای مختلف را در کلاس خود محدود کنید، این ایده به شما کمک میکند تا کد خواناتر و بهتری را تولید کنید.
برای محدود کردن دسترسی به پروپرتیهای کلاس خود، باید از اصلاحکنندههای دسترسی (ٰaccess modifiers) استفاده کنید. در پیاچپی نیز مثل بسیاری از زبانهای خانوادهی سی، ۳ عدد اصلاحکننده دسترسی موجود است:
- public (عمومی)
- private (خصوصی)
- protected (محافظ شده)
اصلاحکنندهی پیشفرض برای هر پروپرتی در هر کلاس در پیاچپی، Public است. به مثال زیر توجه کنید:
مرحله شانزدهم:
محدود کردن دسترسی به پروپرتیها: بخش دوم
هنگامی که یک پروپرتی را در کلاسهای پیاچپی از نوع private تعیین کنیم، فقط برخی از کلاسهای دیگر میتوانند به مقدار این پروپرتی دسترسی داشته باشند.
هنگامی که یک پروپرتی را در کلاسهای پیاچپی از نوع protected تعیین کنیم، فقط برخی از کلاسهای مشتق شده از کلاس مورد نظر، امکان دسترسی به پروپرتی یاد شده را خواهند داشت. مشتق شدن و مباحث مربوط به ارثبری در کلاسهای پیاچپی را بعدا به شما آموزش خواهیم داد.
پروپرتیهایی که به صورت Public تعریف شده باشند، محدودیت دسترسی نداشته و این یعنی هر کسی و هر کلاسی میتواند به مقدار آنها دسترسی یابد.
به منظور فهم بیشتر این بخش تقریبا فرار از شیءگرایی در پیاچپی، کد زیر را به دقت مشاهده کرده و آن را خودتان نیز تمرین، تا نتیجه را مشاهده کنید. برای درک بهتر کدها، کامنتهای موجود در مثال زیر را نیز مطالعه کنید.
'Fatal error: Cannot access private property person::$pinn_number in ...'
مرحله هفدهم:
محدود کردن دسترسی به متدها
درست همانند پروپرتیها، شما میتوانید دسترسی به متدهای تعریف شده در یک کلاس را با استفاده از ۳ اصلاحکننده زیر کنترل کنید.
- public (عمومی)
- protected (محافظت شده)
- private (خصوصی)
به طور خلاصه: امکان کنترل کردن دسترسی به متدهای هر کلاس، باعث میشود تا بتوانیم روش استفادهی دیگران از آن کلاس را کنترل کنیم.
احتمالا شما هم متوجه شدهاید که استفاده از محدودکنندههای دسترسی و دیگر ساختارهای برنامهنویسی شیءگرا، کمی زیرکانه خواهد بود. این مورد برای افرادی که به تازگی شروع به یادگیری شیءگرایی کردهاند، بیشتر محسوس است. پس بهتر است شما نیز به خود شانسی بدهید و شروع به یادگیری و استفاده از این روش کنید.
با توجه به آنچه اشاره شد، باید بگوییم که ساختار یکپارچهی برنامه نویسی شیءگرا باعث میشود تا بتوان روی پروژههای موجود که با این روش ساخته شدهاند کار کرد یا پروژههای گروهی را به طور استانداردتر پیش برد. به کد زیر توجه کنید:
نکته اضافه: مجددا ذکر این مورد بسیار مهم است که بگوییم شما خودتان باید دست بکار شده و کدها را به طور عملی بنویسید و سپس آنها را تست کنید. این کار باعث میشود تا موضوع مورد بحث را بهتر درک کنید.
امیدواریم تا به اینجای مبحث، تمام مراحل را به ترتیبی که گفته شده فرا گرفته باشید. در صورتی که سوالی در مورد مباحث مطرح شده دارید، در بخش نظرات میتوانید آن را مطرح کنید.
نظرات