PDA

View Full Version : سوال: تفاوت بین اینکلود کردن یا مشتق کردن در شی گرایی



IMANAZADI
پنج شنبه 15 آبان 1393, 08:19 صبح
با سلام
در یک کلاس چه فرقی میکنه که یک کلاس رو اینکلود کنی یا از همون کلاس اینکلود شده مشتق کنی
توضیح :
من در یک فایل ، کلاسی برای دیتابیس نوشتم
در یک فایل دیگر میخوام کلاس pagination بنویسم برای اینکار هم باید از کلاس دیتابیس استفاده کنم
راه اول اینه که بیام فایل کلاس دیتابیس رو در کلاس pagination اینکلود کنم و در تمامی قسمت ها جهت استفاده از توابع کلاس دیتابیس از this$ استفاده کنم
راه دوم اینه که بیام فایل کلاس دیتابیس رو در کلاس pagination اینکلود کنم و در کلاس pagination رو از کلاس دیتابیس extends کنم و از توابع کلاس دیتابیس بصورت parent:: استفاده کنم


چه فرقی میکنه مشتق کنی یا اینکلود ؟؟؟

arash691
پنج شنبه 15 آبان 1393, 09:47 صبح
ببینید این اشتباه نباید پیش بیاد که چون با include کردن به اعضای یک فایل PHP دیگه دسترسی داریم میتونه معنای ارث بری رو تلقی کنه برامون ، تو بحث برنامه نویسی شئ گرا وراثت زمانی مطرح میشه که دو یا چند کلاس ویژگی های مشترک دارند و می خوایم با در نظر گرفتن یک کلاس واحد بین همشون میزان کدنویسی رو کاهش بدیم ، مثلا" فرض کنید میخوایم یک برنامه حسابداری برای یک شرکت بنویسیم افرادی که تو این شرکت کار میکنن " مدیر عامل ، معاونان ، کارمندان ، تدارکات ، نگهبانی و ... " تو سطح بالاتر وقتی به تمامی این افراد نگاه کنیم ویژگی مشترک بین همه ی اینا " شخص بودن " یا همون " انسان بودن " هستش پس میشه یک کلاس واحد بنام Person گرفت که شامل ویژگی های مشترک بینشون مثل " نام ، نام خانوادگی و ... " باشه که دیگه تو هر کلاس از بیان کردنش بپرهیزیم . تو بعضی مواقع شاید مفهوم ویژگی رو فقط به عمل انجام یک یا چند کاری نسبت بدیم مثل همین کاری که شما داری میکنی ممکنه کلاس Post نیاز به چهار عمل اصلی با db داشته باشه از طرفی یک کلاس مثل Pagination مشابه همین موارد رو احتیاج داره.
وقتی که فایل DataBase رو include بکنی باید جداگونه شئ بسازی تا بتونی از شئ اون تو کلاس Pagination استفاده کنی هرچند include درست نیست باید require_once کنی وقتی که عمل ارث بری انجام بدیم عمل تطبیق بین دو کلاس و استفاده از ویژگی های ارث بری بطور خودکار انجام میشه شما دیگه برای استفاده از اعضای کلاس Database شئ نمی سازی فقط با ::parent به اعضای والد اشاره میکنی .

یه نکته ی دیگه که یادم رفت بگم . کارهایی که مربوط به PHP هستش رو بزاریم خودش انجام بده منظورم اینه وقتی auto_load داره چرا ما بیام کلاس رو دستی بهش بفهمونیم

IMANAZADI
پنج شنبه 15 آبان 1393, 09:55 صبح
ممنون میشم دوستان دیگه هم نظرشون رو بگن