PDA

View Full Version : PHP و برنامه نويسی شی گرا



دکمه64
پنج شنبه 21 آذر 1387, 14:33 عصر
PHP تا چه حد شی گراست؟! آيا تمام امکاناتی که در زبانهای برنامه نويسی شی گرای کاملی همچون Java وجود داره، در PHP هم پشتيبانی ميشه؟! پاسخ به اين سوال تا حدی بر ميگرده به معيارها و شرايطی که شما برای شی گرا بودن یک زبان مدنظر داريد. در اين پست من سعی ميکنم امکاناتی که نوعا در يک زبان برنامه نويسی شی گرا وجود داره رو بررسی کنم و حرفايی که PHP در هر مورد برای گفتن داره رو تا حدی توضيح بدم. (این راهنما بیشتر برای کسانی هست که از زبانهای OO دیگری میخوان به PHP روی بیارن.)
لازم به ذکر است که تنها به قابلیت های موجود در نسخه پایدار PHP که از Zend Engine 1 بعنوان مفسر(Parser) خود بهره می بره، پرداخته شده است.
وراثت یگانه(Single Inheritance):
PHP به شما اجازه میده که با استفاده از عبارت extends یک کلاس فرزند تعریف کنید که تمام مشخصه ها و رفتارهای کلاس والد رو دارا هست.(تعریف یک کلاس، از کلاس دیگه به ارث می رسه.)
وراثت چندگانه(Multiple Inheritance):
PHP از وراثت چندگانه پشتیبانی به عمل نمی یاره و هیچ نشانی از وراثت واسطه که در جاوا وجود داره دیده نمیشه. هر کلاس حداکثر یک کلاس والد خواهد داشت.
سازنده ها(Constructors):
هر کلاس می تونه یک تابع سازنده داشته باشه که در نسخه فعلی PHP که از Zend Engine 1 بهره می بره، باید همنام کلاس باشه. در نسخه بعدی PHP که مجهز به ZE2 می باشد، تابع سازنده هر کلاس ()construct__ نام خواهد گرفت. تابع سازنده کلاسهای والد به طور اتوماتیک فراخوانی نمی شن مگر اینکه صریحا احضار بشن!
تخریب کننده ها(Destractors):
نسخه فعلی PHP (با ZE 1) تابع تخریب کننده نداره، بیشتر به این خاطر هست که آزاد سازی حافظه و برگرداندن حافظه تخصیص یافته دست برنامه نویس نیست. اما نسخه های بعدی تابع تخریب کننده را دارا می باشد.
کپسوله سازی و کنترل دسترسی(Encapsulation):
هيچ پشتيبانی از کپسوله سازی در نسخه جاری PHP به عمل نيومده و تمام مشخصه ها و رفتارها Public هستند، اما تو نسخه بعدی دو نوع Private و Protected افزوده شده است.
چند شکلی(Polymorphism):
PHP چند شکلی رو به این صورت پشتیبانی میکنه که اجازه میده نمونه کلاس های فرزند به جای نمونه کلاسهای والد استفاده بشه.
اتصال دیر یا زود(Early vs. late binding)
دو پاسخ مناسب به این موضوع به قرار ذیل هست:
۱) از اونجایی که PHP یک زبان Loosely Type هست، این سوال پیش نمی یاد.
۲) تمام اتصالات Late هستند. در PHP مقادیر دارای نوع هستند ولی متغیرها بی نوع هستند، بنابراین این سوال که اگه نوع متغیر و مقدار متفات باشه کدوم متد فراخوانی بشه، به وجود نمی یاد.
توابع ايستا(Static Functions)
پشتيبانی صريحی از Class Functionها وجود نداره اما ميشه که با استفاده از سينتکس ()Classname::function ميشود تابع يک کلاس رو فراخوانی کرد. اين تابع تا وقتيکه به يک متغير داخلی ارجاع نکنه ، به عنوان يک Class Function در نظر گرفته ميشه.
درون نگری(Introspection):
در اين مورد PHP با دست پر ظاهر شده و توابع متنوعی برای کسب اطلاعات در مورد يک کلاس وجود داره، مثلا بازيابی نام کلاس، نام يک تابع، نام متغيرهای(مشخصه های) يک نمونه کلاس و ...

در آینده بیشتر با این مفاهیم آشنا میشیم.

»» حالا به نظر شما آيا زبانهای برنامه نويسی وب واقعا به OOP نياز دارند؟!

naser67
پنج شنبه 21 آذر 1387, 16:28 عصر
فکر کنم شما با php5 تا حالا برخورد نداشتی
درسته ؟

ahmad598
پنج شنبه 21 آذر 1387, 23:11 عصر
خیلی از برنامه ها (حتی برنامه های ساده) به صورت شی گرا نوشته می شن و دیگه روال گرا نیستن؛ به خصوص اگر از زبانهایی مثل جاوا استفاده کنید. در مورد برنامه های وب هم همینطوره. به عنوان مثال به شما پیشنهاد می کنم برید کد joomla رو بخونید (جوملا یه پروژه اوپن سورس برای مدیریت محتواست) تا ببینید که به درد می خوره یا نه! برنامه های بزرگ همه جا وجود دارن حتی وب! از شی گرایی نترسید، واقعا چیز خوش دست و به درد بخوری هست.

persian_farvahar
پنج شنبه 21 آذر 1387, 23:39 عصر
دوست عزیز اینایی که گفتی بره کی بود؟ معلومه از جایی کپی کردین پس حداقل منبعشو میگفتین!! این مطالب برای زمانیه که هنوز php5 نیومده بود و حالا هم که php6 داره میاد ببینیم این نسخه چه چیزایی برای گقتن داره.

tanha2007
جمعه 22 آذر 1387, 16:04 عصر
خوب فکر کنم این تاپیک بتونه مفید باشد...
http://barnamenevis.org/forum/showthread.php?t=83103

yaqubian
شنبه 23 آذر 1387, 08:29 صبح
دوست عزیز
ممنون به خاطر مطالب خوبتون ولی پیشنهاد می کنم لطفا کتاب pro php که مربوط به php 6 می شه رو یه نیگاه بندازین.
موفق باشید

persian_farvahar
شنبه 23 آذر 1387, 12:00 عصر
دوست عزیز ممنون به خاطر مطالب خوبتون ولی پیشنهاد می کنم لطفا کتاب pro php که مربوط به php 6 می شه رو یه نیگاه بندازین. موفق باشید مگه php6 اومد که کتابش اومده؟ چند وقت پیش در مورد تغییراتش یه تحقیق کرده بودم ولی نمیدونستم اومده. تگه اومده اطلاع بدی بریم دنبالش

yaqubian
شنبه 23 آذر 1387, 13:03 عصر
دوست عزیز
تو اینترنت دنبال کتاب pro php بگردید.
موفق باشید

behzadamin12
یک شنبه 25 اسفند 1398, 09:36 صبح
تو کتابا که دقیق اطلاع نمیدن
مثلا یه مثال خوب از شطرنج تو شی گرایی نمیزنن
اینو نگاه کنید به نظرم براتون میتونه مفید باشه
https://jobteam.ir/ProductUser/138-php-oop