معرفی برنامه نویسی شی گرا در PHP
شی گرایی در php ، نوعی رویکرد برنامه نویسی است که در آن از اشیاء (Object)
و کلاسها (Class) استفاده میشود. امروزه بیشتر از جاوا و C++ برای برنامه نویسی
شی گرا استفاده میشود.
PHP4 برای برنامه نویسی شی گرا دارای محدودیتهایی بود، اما object model در
PHP5 برای داشتن کارایی و ویژگیهای بیشتر از نو نوشته شده است. حالا PHP5 دارای
object model کاملی است.
شی چیست ، شی گرایی در php
ایدهی اصلی یک زبان ، شی گرایی در php این است که مجموعهای از متغیرها
(Variable) و توابع (Function) را در یک واحد جمع کنیم و اینطور میتوانیم از آنها
در مقابل دخالتهای بیرونی و سوءاستفاده محافظت کنیم.
به این واحد شی (Object) میگوییم. یک شی روی دادهها کار میکند. مکانیزمی
که دادهها و توابع را کنار هم نگه میدارد، کپسوله سازی (Encapsulation) نامیده می شود.
این ویژگی به استفادهی مجدد از کد در پروژههای مختلف کمک میکند. توابعی که در یک شی
تعریف میشوند، روش رسیدن به دادهها را مشخص میکنند. توابع یک شی، متد (Method)
نامیده میشوند و متدهای یک شی به متغیرهایِ آن دسترسی دارند.
این متغیرها property نامیده میشوند.
شکل زیر اجزاء یک شی را نشان میدهد.
![concept-of-an-object](https://torfenegaran.ir/wp-content/uploads/2021/03/concept-of-an-object.gif)
![class-and-object-of-class](https://torfenegaran.ir/wp-content/uploads/2021/03/class-and-object-of-class.gif)
کلاس ،برنامه نویسی ، شی گرایی در php
شی گرایی در php ، یک کلاس ساختار یا نمونهای است که یک شئ از روی آن
ساخته میشود. یک کلاس اجزای اصلی را تعریف میکند. اینطور نمونههای یک کلاس
میتوانند دارای حالت (State) و رفتار (Behaviour) باشند.
اعضای فیلدهای دادهای (Data Field Members) به شی کلاس این امکان را میدهند که
دارای یک حالت باشد. از طرفی متدها رفتار یک شئ از کلاس را تعیین میکنند. شکل زیر
اجزاء یک کلاس را نشان میدهد.
PHP: ساخت کلاس و نمونهسازی (Instantiation)
- تعریف یک کلاس با کلمهی کلیدی class صورت میگیرد. بعد از آن نام کلاس آورده میشود.
- بعد از {} آورده میشود که ثابتها (constant)، متغیرها (Property) و توابع (متد) مربوط به
- این کلاس در این دو {} قرار میگیرند.
- یک نام کلاس مجاز (نمیتواند یکی از کلمات کلیدی باشد)، با یک حرف یا _ شروع میشود و میتواند
- شامل حروف، اعداد و _، به هر تعدادی، که کاربر میخواهد، باشد.
- برای جدا کردن نام کلاس از سایر identifierها، معمولاً آن را با حرف بزرگ مینویسند.
- یک نمونه (instance) شئای است که از یک کلاس موجود ایجاد شده است.
- ساخت یک نمونه (instance) از یک کلاس موجود را نمونهسازی شی (Instantiating the object) مینامند.
- اگر بیرون از کلاس باشیم و بخواهیم شئای بسازیم، باید از کلمهی کلیدی new استفاده کنیم.
- باید قبل از نمونهسازی، کلاس را تعریف کرده باشیم.
مثال:
![Capture](https://torfenegaran.ir/wp-content/uploads/2021/03/Capture-1.png)
![256](https://torfenegaran.ir/wp-content/uploads/2021/03/256.png)
تنظیمات Propertyها
- متغیرهای عضو کلاس (Class member variable)، Property نامیده میشوند.
گاهی به آنها شناسه (خصیصه) (Attribute) یا فیلد (Field) نیز گفته میشود.
- Propertyها دارای دادهی به خصوصی هستند و به کلاسی که در آن تعریف شدهاند، مرتبطند.
- تعریف یک Property در یک کلاس کاری ساده است. اول یکی از کلمات کلیدی public، private
یا protected را انتخاب کنید. بعد از آن، از یک تعریف سادهی متغیر استفاده کنید. اگر از var برای تعریف
آن استفاده کنیم (تا با نسخهی PHP4 نیز سازگاری داشته باشیم)، Property به صورت public تعریف خواهد شد.
-
- public: یک کلاس دیگر یا خود اسکریپت (Script) میتواند از بیرونِ کلاس به این Property دسترسی داشته باشد.
- private: یک کلاس دیگر یا خود اسکریپت (Script) اصلاً امکان دسترسی به این Property را ندارد.
- protected: تنها کلاسی که فرزند این کلاس (کلاسی که Property در آن تعریف شده) باشد
- و دارای یک Property یا متد protected باشد، میتواند به این Property دسترسی داشته باشد.
- میتوان در همهی data contextهای ایستا، که شامل تعریف Property نیز میشود،
ز دستور nowdocs (از PHP 5.3.0 به بعد) استفاده کرد.
مثال:
بعد از نمونهسازی یک شئ، میتوانید با استفاده از object و عملگر -> به Property یک کلاس
دسترسی داشته باشید. نمیتوانید از بیرون از متدِ کلاس به هر عضوی که با کلمهی
کلیدی private یا protected تعریف شده باشد، دسترسی داشته باشید.
تنظیمات متدها
- توابعی که در یک کلاس تعریف میشوند، متد نام دارند.
- متد یک کلاس دقیقاً شبیه توابع PHP است.
- تعریف یک متد در یک کلاس کاری ساده است. اول از یکی از کلمات کلیدی public
private یا protected استفاده کنید. بعد از آن از یک نام برای متد انتخاب کنید.
-
- public: از بیرونِ کلاس میتوان به متد دسترسی داشت.
- private: از بیرونِ کلاس نمیتوان به متد دسترسی داشت.
- protected: تنها کلاسی که فرزند این کلاس (کلاسی که متد در آن تعریف شده)
باشد و دارای یک Property یا متد protected باشد، میتواند به این متد دسترسی داشته باشد.
- یک نام متد مجاز (نمیتواند یکی از کلمات کلیدی باشد)، با یک حرف یا _ شروع میشود
و میتواند شامل حروف، اعداد و _، به هر تعدادی، که کاربر میخواهد، باشد.
- بدنهی متد در یک جفت {} قرار میگیرد که شامل کد هستند. } ابتدایی نشاندهندهی
ابتدای خطوط کد متد است و } بعدی انتهای متد را نشان میدهد.
- اگر متد با یکی از کلمات کلیدی public، private و protected تعریف نشده باشد،
به صورت پیشفرض public درنظر گرفته میشود.
- میتوان با استفاده از دستور $this (با فرمت $this->property) به propertyها و متدهای
نمونهی کنونی دسترسی داشت، اما تنها برای propertyهای غیر استاتیک.
مثال:
بعد از نمونهسازی یک شئ، میتوانید با استفاده از object و عملگر -> به Property یک کلاس
دسترسی داشته باشید. در مثال بعدی، متد customize_print() با استفاده از دستور echo زبان
PHP یک رشته (string) را با رنگ و اندازهای مشخص در یک پاراگراف HTML نشان خواهد داد.
![Capture 232](https://torfenegaran.ir/wp-content/uploads/2021/03/Capture-2.png)
![Capture](https://torfenegaran.ir/wp-content/uploads/2021/03/Capture-3.png)
PHP: عملگر Scope Resolution (::)
در PHP، عملگر Scope Resolution با نام Paamayim Nekudotayim نیز شناخته میشود
که در زبان عبری به معنای “دو دونقطه” است. “::” نشانهای است که به شما کمک میکند
به متدها یا propertyهای استاتیک، ثابت یا overridden یک کلاس دسترسی داشته باشید.
PHP: ثابت در کلاس (Constant)
- موجودیتی خاص که در قالب یک کلاس ثابت باقی میماند.
- برخلاف تعریف عادی متغیرها، جلوی نام ثابتها علامت ($) قرار نمیگیرد.
- واسطها (Interface) هم میتوانند ثابت داشته باشند.
- وقتی با استفاده از دستور $classname :: constant یک ثابت را از یک کلاس
فراخوانی میکنید، “classname” میتواند درواقع یک متغیر باشد.
- از PHP 5.3 به بعد، میتوانید با ارجاع متغیر (Variable Reference) به ثابت یک کلاس
استاتیک دسترسی پیدا کنید (مثلاً: classname :: $varConstant)
درک مفاهیم public، private و protected برای propertyها
propertyها میتوانند public، private یا protected باشند. public یعنی از هرجایی میتوان
به property دسترسی داشت. private یعنی تنها کلاسی که عضو را تعریف میکند، میتواند به
property دسترسی داشته باشد.
protected یعنی میتوان داخل کلاس به property دسترسی داشت و همچنین کلاسهای فرزند
و والد نیز میتوانند به آن دسترسی داشته باشند.
مثال:
![569](https://torfenegaran.ir/wp-content/uploads/2021/03/569.png)
![788](https://torfenegaran.ir/wp-content/uploads/2021/03/788.png)
درک مفاهیم public، private و protected برای متدها
متدها میتوانند public، private یا protected باشند. public یعنی از هرجایی میتوان به
متد دسترسی داشت. private یعنی تنها کلاسی که عضو را تعریف میکند، میتواند
به متد دسترسی داشته باشد.
protected یعنی میتوان داخل کلاس به متد دسترسی داشت و همچنین کلاسهای فرزند
و والد نیز میتوانند به آن دسترسی داشته باشند.
مثال:
PHP: متدهای سازنده (Constructor Methods)
- سازنده یک متد توکار خاص است که در PHP5 اضافه شده است و برنامهنویسان
میتوانند آن را برای کلاسها تعریف کنند.
- سازندهها این امکان را فراهم میکنند که با ساخت یک شئ، propertyهای آن ساخته
و مقداردهی اولیه شوند (به عبارت دیگر مقادیر propertyها).
- با ساخت یک شئ، کلاسهای دارای یک سازنده به صورت خودکار اجرا میشوند.
- متد “construct” با (__) شروع میشود.
- اگر با ایجاد شئ قصد انجام کاری را ندارید، یا نمیخواهید مقدار property را انتقال دهید
لازم نیست سازنده داشته باشید.
- PHP تنها یک سازنده را فراخوانی میکند.
سینتکس (syntax) کلی برای تعریف سازنده به صورت زیر است:
نوع آرگومانهای argument1، argument2 تا argumentN متغیر است.
![Capture](https://torfenegaran.ir/wp-content/uploads/2021/03/Capture-4.png)
![89](https://torfenegaran.ir/wp-content/uploads/2021/03/89.png)
PHP: متدهای مخرب یا تخریبکننده (Destructor Methods)
- مخربها نقطهی مقابل سازندهها هستند.
- تابع مخرب در زمان از بین بردن یک شئ فراخوانی میشود.
- پس از تخریب یک شئ، تابع مخرب تمامی منابع تخصیص یافته به شئ را پس میگیرد.
- معمولاً تابع مخرب به دو صورت فراخوانی میشود: هنگام اتمام یک اسکریپت
یا به صورت دستی با صدا زدن تابع unset() یک شئ را پاک میکند.
- متد “destructor” با (__) شروع میشود.
سینتکس (syntax) معمول برای تعریف یک مخرب به صورت زیر است:
نوع آرگومانهای argument1، argument2 تا argumentN متغیر است.
PHP: ساختن نمونههای (Instance) متعددی از یک کلاس
در مثال بعدی چندین شئ (نمونه (Instance)) از یک کلاس ساختهایم و مقادیر مختلفی را به آنها دادهایم.
![Capture 699](https://torfenegaran.ir/wp-content/uploads/2021/03/Capture-5.png)
![inheratance-of-a-derived-class](https://torfenegaran.ir/wp-content/uploads/2021/03/inheratance-of-a-derived-class.gif)
PHP: ارثبری
- ارثبری یکی از اصول قدیمی و مشهور برنامهنویسی است.
- ارثبری به کلاسها اجازهی تشکیل یک ساختار سلسلهمراتبی را میدهد
درست شبیه یک درخت خوانواده (شجرهنامه).
- به سابکلاسها (کلاسهای فرزند (Subclass)) این اجازه را میدهد که متدها و
propertyهای سوپرکلاس (کلاس والد (Supperclass)) را به ارث ببرند.
- سوپرکلاس، کلاس والد است.
- یک سابکلاس میتواند متدها و propertyهایی به خود اضافه کند.
- ارثبری موجب استفادهی مجدد از کد میشود.
آخرین مقالات
برچسب ها
درباره طرفه نگاران کهن
طرفه نگاران کهن در آغاز فعالیت به ارائه خدمات مورد تقاضای جامعه مخاطبان این حوزه می پرداخت. در ادامه با گسترش مجموعه خدمات خود در بازه زمانی پنج ساله به یک آژانس جامع گرا تبدیل شد. از این تاریخ، طرفه نگاران کهن، هر سال با تکمیل توانایی های خود، ارتقای کیفیت خدمات و افزایش تعداد مشتریان در مسیر رشد مستمر گام برداشته است و با خلق ارزش مستمر برای ذی نفعان، با کسب جایگاه برتر در زمینه بازاریابی و تبلیغات، همکاری های موفقیت آمیزی را با برند های معتبر رقم زده است