PDA

View Full Version : سوال: زمان استفاده از Interface و ABSTRAT



jionelmessi
چهارشنبه 20 فروردین 1393, 17:47 عصر
با سلام

من مخوام برای یک دانشگاه پروژه کتابخونه طراحی کنم که تقریبا میشه مانند یک شبکه اجتماعی
الان من مفهوم ارٍ بری و ابسترکت و اینترفیس نحوه کدنویسیشونو بلدم در ضمن قالب کاریم MVC است فقط نمدونم الان ن از ABSTRACT استفاده کنم یا اینترفیس یا ارث بری از کلاس معمولی چون همه مدلش مشه پیشنهادی کسی داره؟

saeedvir
پنج شنبه 21 فروردین 1393, 08:30 صبح
قبلا بحث شده - در انجمن جست و جو کنید.

jionelmessi
شنبه 23 فروردین 1393, 13:43 عصر
همه تاپیک های قبل رو خوندم ولی از mvc چیزی بیان نکردن
ساختار mvc که من راه انداختم ا اینه که همه کلاس ها در یک متغیر registry ذخیره مشوند و ما به صورت زیر به آن دسترسی پیدا می کنیم



$this->registry->ClassName->MetodName();





حالا سوالم اینه که با این روش دیگه نیازی به ار بری ندارم و میتونم تو هررکلاسی مستقیم به متد یک کلاس دیگر دسترسی پیدا کنم مخوام بدونم این مدل بهتره یا نه ارث بری؟

MMSHFE
شنبه 23 فروردین 1393, 16:25 عصر
هر کدوم کاربردهای خاص خودشون رو دارن. وراثت برای وقتی خوبه که یک کلاس بخواد امکاناتی به یک کلاس دیگه اضافه کنه یا تغییرش بده. رابط و کلاس چکیده هم هرکدوم کاربردهای خاص خودشون رو دارن. میتونید برای اطلاعات بیشتر درمورد شئ گرایی جلسات 10 به بعد تاپیک آموزش مرحله به مرحله PHP رو در همین تالار مطالعه کنید یا درصورت تمایل، پکیج آموزش جامع PHP رو از لینکی که توی امضام هست، تهیه کنید.

jionelmessi
یک شنبه 24 فروردین 1393, 10:18 صبح
هر کدوم کاربردهای خاص خودشون رو دارن.

من از کاربرداشون آگاهی دارم فقط الان تو دوراهیم که طبق همون روال قبلیم پیش برم یا ن از ارث بری استفاده کنتم
مثلا قبلا یک کبلاس می ساختم برای هر موجودیتم مثلا برای اخبار یک کلاس برای محصولات یک کلاس و..
بعد تو این کلاس ها برای هر کدوم عملیات ویرایش و add و ... می ذاشتم
بعد ابتدا کار همه کلاس ها را در یک آررایه به نام egistry ثبت می کردم تا نیازی به include نداشته باشم تو هرکلاس.
و به این طریق بهشون دسترسی پیدا می کردم



$this->registry->classname->methodname()



حالا که مطالب بیشتر راجبلب شی گرایی تو php خوندم ( از سایت شماا و مقالات انگلیسی) موندم از ارث بری استفاده کنم یا همون ثبت تمامی کلاس ها در ابتدای بارگذاری و دسترسی به آنها از طریق فرمول بالا؟

MMSHFE
یک شنبه 24 فروردین 1393, 11:32 صبح
خوب چند راه دارین. ببینید، مثلاً شما میتونید یک کلاس پایه داشته باشین به اسم DB که تمام کلاسهای شما از اون مشتق میشن و توی اون کلاس پایه، یکسری متد protected تعریف کنید برای انجام کارهای مشترکی مثل اتصال به دیتابیس و ارسال کوئری و گرفتن جواب و Escape کردن و... و توی هر کلاسی که ازش مشتق میکنید، عملیات CRUD مربوط به همون جدول از دیتابیس رو پیاده سازی کنید.
یک راه دیگه، استفاده از یک کلاس abstract بعنوان کلاس والد هست که علاوه بر تعریف متدهای فوق، به شما امکان میده که متدهای insert و... رو بصورت abstract داخلش تعریف کنید و درنتیجه هر کلاسی ازش مشتق بشه باید این متدها رو با ساختاری که گفته، پیاده سازی کنه.
روش دیگه، استفاده از یک رابط هست که اگه کلاسهای شما با implements اعلام کنن اون رابط رو میخوان پیاده سازی کنن، باز هم باید متدهایی که گفته رو پیاده سازی کنن و شما خیلی ساده توی برنامه با instanceof میتونید چک کنید اگه یک کلاس، رابط رو پیاده سازی رده باشه، میتونید متدهای موردنظر رو صدا بزنید. برای مثال:

class Users extends DB implements iCRUD {
...
$users = new Users;
if($users instanceof iCRUD) {
$users->insert();
}