PDA

View Full Version : سوال: فصل12کتاب آقای شهرکی



sara.saba90
جمعه 09 اسفند 1392, 11:48 صبح
با سلام
من فصل 12کتاب آقای شهرکی رو متوجه نمیشم و واسم گنگ و مبهمه اگر میشه درباره این قسمت توضیح بدید یا یاری برسونید یا مرجعی معرفی کنید ممنون میشم از لطفتون

mirzajavad
جمعه 09 اسفند 1392, 15:41 عصر
سلام
فصل 12 در چه مورد هستش ؟
بهتره هر بخشی رو که متوجه نمیشید به عنوان سوال مطرح کنید

MMSHFE
جمعه 09 اسفند 1392, 18:29 عصر
کدوم قسمت رو متوجه نمیشین؟ توی این جلسه مفاهیم زیادی معرفی شده. هرکدوم رو مشکل دارین بفرمایید تا توضیح بدم.

sara.saba90
جمعه 09 اسفند 1392, 19:16 عصر
1-ثابت ها در کلاس.2-متدهای دستیاب 3-استفاده از متدهای جادویی برای دستیابی به فیلدهای کلاس 4- متدهای جادویی برای سربار گذاری متدهای کلاس
کلا این مباحثو متوجه نشدم و اگر میشه با ارائه یک نمونه کد یک توضیحی درباره این مباحث و کاربردآنها در شی گرایی بدید ممنون میشم
دستتون درد نکنه

sara.saba90
شنبه 10 اسفند 1392, 10:38 صبح
دوستان اگر میشه یاری برسونید ممنون میشم

leaping
شنبه 10 اسفند 1392, 11:17 صبح
دوستان اگر میشه یاری برسونید ممنون میشم
کلا اگر تازه برنامه نویسی رو شروع کردین بهتون توصیه میکنم ابتدا مفاهیم برنامه نویسی رویه ای رو به صورت کامل یاد بگیرید بعد برید سراغ شی گرایی

MMSHFE
شنبه 10 اسفند 1392, 12:14 عصر
1-ثابت ها در کلاس

ببینید، فرض کنید میخواین یک مقدار ثابت توی کل کلاس داشته باشین که همه جا توی همه متدها و حتی بیرون از کلاس هم بشه ازش استفاده کرد ولی نمیخواین فیلد (متغیر) باشه چون اگه تغییر کنه، توی کارکرد کلاستون مشکل ایجاد میشه. برای این منظور، توی کلاستون با کلمه کلیدی const یک ثابت تعریف میکنید و بهش مقدار میدین و به همون شکلی که توی آموزش گفتم، ازش استفاده میکنید.


2-متدهای دستیاب

چیز زیاد پیچیده ای نیست. کلاً دو نوع دستیاب داریم (Getter یا بطور خلاصه get و Setter یا بطور خلاصه set). با کمک این دو دستیاب که درواقع دو متد هستن، میتونیم به فیلدها دستیابی پیدا کنیم و کارهایی مثل خوندن و مقداردهی رو مثل فیلدهای معمولی که public میشن، انجام بدیم ولی فیلدهای موردنظر واقعاً public نشدن و عمل مقداردهی داره توسط دستیاب set و خوندن توسط دستیاب get انجام میشه و چون اینها، متد هستن، میتونیم عمل اعتبارسنجی در مقداردهی و... رو هم انجام بدیم. حالا یکبار دیگه به کد نمونه که گذاشته شده دقت کنید و اگه باز هم ابهامی بود، بفرمایید بیشتر توضیح بدیم.


3-استفاده از متدهای جادویی برای دستیابی به فیلدهای کلاس

علت اینکه به این متدها (get__ و set__) جادویی میگیم هم اینه که برحسب مکان فراخوانی، اسمشون عوض میشه. مثلاً اگه من بیام بگم obj->name$ درحالی که فیلد public به اسم name توی obj$ نداشته باشم، برحسب اینکه میخواستم به obj->name$ مقدار بدم یا مقدارش رو بخونم، به ترتیب متد set__ یا get__ فراخوانی میشه.


4- متدهای جادویی برای سربار گذاری متدهای کلاس

تعریف متد جادویی رو که گفتم. سربارگذاری (Overload) هم به معنای اینه که عمل اصلی که یک عملگر یا متد انجام میداده رو تغییر بدیم. حالا نقش متدهای جادویی این وسط چیه؟ کلاً توی PHP به متدهایی که با __ شروع میشه و خود PHP تعریفشون کرده میگن متدهای جادویی (دوباره تعریفش و اینکه چرا میگن جادویی رو تکرار نمیکنم). یکی از این متدها هم call__ هست. توی دستیابها گفتیم که با get__ و set__ میتونیم عمل خوندن و نوشتن توی فیلدهای کلاس رو جوری تغییر بدیم که درواقع توسط این متدها انجام بشه ولی کسی که از کلاس داره استفاده میکنه، مثل یک فیلد باهاش رفتار میکنه و برای مثال، جلوش پرانتز نمیگذاره و میتونه به راحتی توی عبارتهای محاسباتی و... هم ازش استفاده کنه. حالا call__ یه کاری شبیه همین رو برای متدها انجام میده یعنی اینکه اگه من توی کلاسم بیام و از متد call__ استفاده کنم و دو تا پارامتر براش تعریف کنم، کاربر وقتی میگه $obj->test($id); درحالی که کلاس من متدی به اسم test نداره، اونوقت بطور خودکار متد call__ صدا زده میشه و 'test' رو بعنوان پارامتر اول و id$ رو بعنوان پارامتر دوم بهش میده و من توی اون متد میتونم با یه switch...case روی پارامتر اول ببینم چه متدی درخواست شده و با بررسی پارامتر دوم هم ببینم چه پارامترهایی براش ارسال شده و کار موردنظر کاربر رو انجام بدم و دیگه نیازی نیست بطور جداگانه متد برای هرکدوم تعریف کنم. از این روش بیشتر برای مواقعی استفاده میشه که بخوایم کلاس ما هرجور متدی براش فرستاده شد، خطای Fatal Error تولید نکنه و خودمون خطاها رو مدیریت کنیم. مثلاً توی ساختار switch که برای پارامتر اول میگذاریم، در قسمت default یک پیغام چاپ کنیم و بگیم «عملیات موردنظر شما تعریف نشده است».

metal gear solid 4
شنبه 10 اسفند 1392, 12:53 عصر
در حال حاظر لینک ندارم اما توی آموزش های ویدئویی Killerphp advanced topics این مفاهیم رو توضیح داده. در صورتی که این مفاهیم هنوزم براتون سخته. پیشنهاد میکنم این آموزش هارو حتماً ببینید.

abolfazl-z
شنبه 10 اسفند 1392, 15:43 عصر
2-متدهای دستیاب


چیز زیاد پیچیده ای نیست. کلاً دو نوع دستیاب داریم (Getter یا بطور خلاصه get و Setter یا بطور خلاصه set). با کمک این دو دستیاب که درواقع دو متد هستن، میتونیم به فیلدها دستیابی پیدا کنیم و کارهایی مثل خوندن و مقداردهی رو مثل فیلدهای معمولی که public میشن، انجام بدیم ولی فیلدهای موردنظر واقعاً public نشدن و عمل مقداردهی داره توسط دستیاب set و خوندن توسط دستیاب get انجام میشه و چون اینها، متد هستن، میتونیم عمل اعتبارسنجی در مقداردهی و... رو هم انجام بدیم. حالا یکبار دیگه به کد نمونه که گذاشته شده دقت کنید و اگه باز هم ابهامی بود، بفرمایید بیشتر توضیح بدیم.


در کل یک قانون هست ولی اجباری نیست که ما بیاییم از get یا set استفاده کنیم. درسته ؟

ولی در کل برای خوانایی بیشتر بهتره هست از همین روش استفاده کنیم. (این رو تجربه ثابت می کند)

MMSHFE
شنبه 10 اسفند 1392, 16:52 عصر
ابداً اجباری نیست. هروقت احساس کردین میتونه توی انجام کارها بهتون کمک کنه و کدتون رو خواناتر و بهینه تر کنه، ازش استفاده کنید.

sara.saba90
یک شنبه 11 اسفند 1392, 10:59 صبح
ممنون از همگی