آموزش مفاهیم پایه شی گرایی در PHP (جلسه اول) - نسخهی قابل چاپ +- انجمن عمومی گسترش فناوری آگو (http://forums.ago.ir) +-- انجمن: انجمن های عمومی گسترش فناوری آگو (/forumdisplay.php?fid=1) +--- انجمن: برنامه نویسی (/forumdisplay.php?fid=13) +--- موضوع: آموزش مفاهیم پایه شی گرایی در PHP (جلسه اول) (/showthread.php?tid=2081) |
آموزش مفاهیم پایه شی گرایی در PHP (جلسه اول) - agotd - 01-27-2013 04:56 PM [/php]سلام از عنوان انتخاب شده معلوم هست که در مورد چی هست ولی من واسه اون دسته از کسانی که به تازگی وارد برنامه نویسی شند توضیح می دم : برنامه نویسی شی گرا (OOP مخفف Object Oriented Programming) شیوه ای از برنامه نویسی است که بیشتر بر روی شی کار میکند . هر شی دارای توابع و متغیر هایی می باشد که درون شی تعریف می شوند. در PHP ما با استفاده از Class اشیا مورد نظر خود را تعریف می کنیم . مثال : کد php: <?php حالا این کد رو اجرا می کنیم . ولی خروجی در صفحه مشاهده نمی کنیم ! چرا ؟ برای اینکه ما باید این شی را در برنامه به یک متغیر نسبت بدهیم . بدین صورت : کد php: <?php همانطور که می بینید توسط new بعد از مساوی نام کلاسی که ساختیم را می نویسیم. تا اونجا که من میدونم در PHP 4 یک کپی از این کلاس درون متغیر یا شی قرار می گیره .. اما در PHP 5 فقط یک دستگیره از کلاس به شی ارجا می شود. حالا نوبت به استفاده تابع درون کلاس می باشد. برای اینکه به توابع یا متغیر های درون Class دسترسی داشته باشیم باید از پس از نام متغیر از <- استفاده کنیم : کد php: <?php خیلی ساده بود نه ؟ حالا یکم سخت ترش می کنیم. به کلاسی که ساختیم یک متغیر اضافه می کنیم. بدین صورت : کد php: <?php یک تابع جدید با نام ()set_my_name بوجود می آوریم : کد php: <?php خب حالا یه سوال پیش میاد که ما به متغیر هایی که درون کلاس تعریف می کنیم به چه صورت دسترسی پیدا می کنیم ؟ جواب خیلی سادست .. همون طور که نام تابع رو صدا زدیم می تونیم بجای نام تابع نام متغیر رو بنویسیم و به متغیر درون کلاس دسترسی داشته باشیم. کد php: $my_var->myname = "ALI"; // می توانید به متغیر بدهید ما تاحالا از بیرون کلاس به متغیر ها و توابع دسترسی داشتیم .. اما راهی برای دسترسی از درون کلاس به اشیاء کلاس هست ؟ بله .. توسط متغیر this$ می توانید به متغیر ها درون یک شی دسترسی داشته باشید و به آنها مقدار بدهید یا مقدار آنها را درون متغیر دیگری قرار دهید یا مقدار آن را مورد مقایسه قرار دهید. توی یک مثال ساده توسط this$ به متغیر myname$ مقداری می دهیم : کد php: <?php در تابع ()set_my_name توسط this$ به متغیر myname$ مقدار Ali را ارجا دادیم. کد php: function set_my_name() حالا تابع ()print_my_name را با کمک this$ طوری تغییر می دهیم که متغیر myname$ را چاپ کند : کد php: <?php با اجرای این اسکریپت بازم شما هیچ خروجی نخواهید داشت .. زیرا شما باید ابتدا تابع ()set_my_name را اجرا کنید تا درون متغیر myname$ مقدار Ali قرار بگیرد .. سپس تابع ()print_my_name را اجرا کنید .. پس قبل از دستور اجرای تابع ()print_my_name دستور اجرای تابع ()set_my_name را صادر می کنیم : کد php: <?php حالا برای بهتر شدن این کد آخرین تغیرات رو انجام می دهیم در تابع ()set_my_name یک تغییر کوچک می دهیم : کد php: function set_my_name($name) فکر می کنم فهمیدید چیکار کردم ! با تغییرات انجام شده تابع ()set_my_name یک آرگمان اجباری از شما میخواهد و مقدار همون آرگمان رو در خروجی چاپ می کنه پس حالا باید دستور اجرا ی تابع ()set_my_name رو تغییر بدهیم تا رشته ای که به عنوان آرگمان می گیرد را چاپ کند. کد php: $my_var->set_my_name('Ali'); این هم اسکریپت نهایی : کد php: <?php RE: آموزش مفاهیم پایه شی گرایی در PHP (جلسه دوم) - agotd - 01-28-2013 03:14 PM ()construct__ تابعی که با این نام باشه هنگام ساختن یک شی از کلاس بطور خود کار اجرا میشه ()destruct__ تابعی که با این نام باشه هنگامی که شما عملیاتتون با شی تموم بشه بطور خود کار اانجام می شه ::self با این متد می تونید از داخل کلاس یک تابع از کلاس رو صدا بزنید ::parent این متد به کلاس والد اشاره می کنه .. زمانی که شما یک کلاس رو فرزند کلاس دیگری قرار بدید با یک مثال ساده کار رو شروع می کنیم. به کد زیر نگاه کنید کد php: <?php خروجی کد php: construct همون طور که می بینید با اینکه ما فقط یک شی رو به یک متغیر نسبت دادیم باز هم متد construct__ اجرا شد . حالا اگه این تابع construct__ چند تا آرگمان در ابتدا از ما بخواد باید چطوری این آرگمان ها رو مقدار دهی بکنیم ؟ حالا به کد زیر نگاه کنید کد php: <?php و خروجی : کد php: Ali پس اگر تابع construct__ در ابتدا نیاز به آرگمان داشت می بایست در هنگام تعریف شی آرگمان رو مقدار دهی کرد. وگر نه شما با خطایه کد php: Warning: Missing argument 1 for Myclass::__construct(), called in FILE ADRESS on line LINE NUMBER and defined in FILE ADRESS on line LINE NUMBER ر PHP 4 شما می تونید بجای استفاده از construct__ از نام کلاس به عنوان نام تابع استفاده کنید و این تابع هم مانند construct __ عمل خواهد کرد. کد php: <?php باز هم خروجی Ali خواهد بود. (این قابلیت در php 5 هم support می شود) حالا به این کد نگاه کنید : کد php: <?php خروجی : کد php: AliAkbar همون طور که دید باز هم فقط متغیر رو به شی نسبت دادیم ولی پس از پایان اسکریپت تابع destruct__ عمل کرد و خروجی رو تغییر داد . شاید این سوال براتون پیش بیاد که در هر بار استفاده از شی در پایان destruct__ اجرا می شه ؟ جواب منفی هست و با این کد ثابتش می کنیم کد php: <?php خروجی : کد php: Ali$Akbar اگر هر بار بعد از استفاده از شی destruct__ اجرا می شد باید دوبار Akbar چاپ می شد اما دیدید که این طور نبود. حالا به این کد نگاه کنید : کد php: <?php خروجی : $ همون طور که دید ما از داخل تابع Myclass تابع t_empty رو صدا زدیم. شما می تونید با استفاده از این متد به دیگر توابع دسترسی داشته باشید و آنها رو اجرا کنید. اما ::parent قبل از توضیح parent باید به شما یاد بدم که چطوری یک کلاس رو والد کلاس دیگری قرار بدیم . به این کد نگاه کنید : کد php: <?php همون طور که می بینید ما اینجا 2 کلاس داریم. کلاس B فرزند کلاس A هست. در مثال کاملا واضح هست که توسط extends یک کلاس رو فرزند کلاس دیگری قرار دادیم. و توسط متد ::parent تابع example کلاس مادر رو صدا زدیم . فکر نمی کنم مطلبی مونده باشه .. با آرزوی موفقیت برای شما آموزش مفاهیم پایه شی گرایی در PHP (جلسه سوم) - agotd - 01-31-2013 03:18 PM پولی مورفیسم می شه گفت پیچیده ترین روش برنامه نویسی در مبحث oop بر می گرده به این بخش . با استفاده از این روش می توانید کنترل برنامه را افزایش داده و از تعریف چند آبجکت برای چند کلاس جلوگیری کرد . این مثال از صفحه 67 و 68 PHP 5 Power Programming هست . کد php: class Cat { جالب بود نه ؟ عملکرد برنامه : دو کلاس یکی با نام Cat و دیگری با نام Dog وجود دارد . تابع printTheRightSound با استفاده از پولی مورفیسم به دنبال کلاس مورد نظر می گردد و تابع موجود در کلاس را صدا می زند . ولی یک اشکال در این روش وجود دارد .. اگر بخواهیم چند صدا از دیگر حیوانات اضافه کنیم باید بدنه Else If را گسترش بدهیم که این روش خوانایی برنامه را پایین می آورد .. راه حل جالبی برای این کار در PHP وجود دارد . آن هم استفاده از توارث است . این بار یک کلاس با نام Animal به برنامه اضافه می کنیم. به این کد با دقت نگاه کنید : کد php: class Animal { خب همونطور که دیدید مشکل گسترش بدنه Else If هم حل شد . نیاز به توضیح خاصی نیست (اینجور که فکر می کنم). در صورت اینکه سوالی بود همینجا بپرسید |