برنامه نویسی شیء گرا در php قسمت اول - نسخهی قابل چاپ +- انجمن عمومی گسترش فناوری آگو (http://forums.ago.ir) +-- انجمن: انجمن های عمومی گسترش فناوری آگو (/forumdisplay.php?fid=1) +--- انجمن: برنامه نویسی (/forumdisplay.php?fid=13) +--- موضوع: برنامه نویسی شیء گرا در php قسمت اول (/showthread.php?tid=2407) |
برنامه نویسی شیء گرا در php قسمت اول - agotd - 04-14-2014 02:42 PM برای بیشتر برنامه نویسان php برنامه نویسی شیء گرا یک مفهوم ترسناک و سرشار از کدهای پیچیده تلقی میشه.برنامه نویسی شیء گرا در اصل یک شیوه برنامه نویسی که یک سری اعمال رو داخل کلاسها دسته بندی میکنه برای انسجام بیشتر .در ادامه به مقدمات برنامه نویسی شیء گرا در php میپردازیم. درک مفهوم برنامه نویسی شیء گرا برنامه نویسی شیء گرا یک شیوه کد نویسی است که به برنامه نویس ها اجازه میده کارهای مشابه رو در ” کلاسها ” جمع آوری کنن.این روش به ما کمک میکنه تا با اصول DRY (Don`t repeat yourself) کد نویسی کنیم و همچنین در نگهداری کدها یه ما کمک میکنه. DRY : به این معنیست که در یک پروژه برای هر عمل فقط یک بار کد بنویسید. یکی از اصلی ترین مزیتهای DRY اینه که اگر نیاز باشه قسمتی از پروژه تغییر پیدا کنه معمولا فقط یک قسمت از کدها باید ویرایش بشه.یکی از بزرگترین کابوسهای برنامه نویس ها نگهداری از کدهای نوشته شده است به این معنی که هنگامی که یک سری از کارها به بارها و بارها انجام میشه و هر تغییری که نیاز باشه در کدها داده بشه باید تمام قسمتهای برنامه چک بشه و تغییر داده بشه. برنامه نویسی شیء گرا سک ترس رو در برنامه نویسها ایجاد میکنه چون یک ساختار جدید از کد نویسی رو معرفی میکنه یا نسبت به برنامه نویسی تابعی (procedural) یا خطی یک ساختار پیچیده تر رو به نمایش میذاره. به هر حال وقتی از نزدیک به برنامه نویسی شیء گرا نگاه کنیم میبینیم که خیلی ساده تر و راحت تر میتونیم به اهداف مون برسیم. مفهوم شیء( Object) و کلاس (class) قبل از اینکه بتونیم عمیقتر به نکات ظریف برنامه نویسی شیء گرا برسیم لازمه که با تفاوت بین کلاس و شیء آشنا بشیم. تشخیص تفاوت بین کلاس و شیء یک کلاس رو میتونیم به ” نقشه یک ساختمان” تشبیه کنیم.این نقشه شکل ساختمان رو روی کاغذ تعریف میکنه.ارتباطات بین اجزای مختلف این ساختمان هم باید در نقشه به صورت کامل بیان بشه. یک شیء در واقع ” یک ساختمان واقعی” به حساب میاد که از روی نقشه (کلاس) ساخته شده.سازه های استفاده شده داخل این ساختمان مثل آهن،چوب و … اگر بدون در نظر گرفتن نقشه به هم پیوند داده بشن فقط مقدار زیادی از مصالح بی کاربرد هستند.به هر حال هنگامی که با یک نقشه خوب با هم ترکیب میشن یک ساختمان خوب و مفید ساخته خواهد شد. بیشتر از یک ساختمان (شیء) میتونه ساخته بشه از یک نقشه(کلاس) . یک شیء یک سری خواص (property) داره و میتونه اعمالی(method) رو انجام بده. شیء ساختمان یکی از کارهایی که انجام میده محافظت از ما در مقابل باد و بارونه.(Method) شیء ساختمان یک از خواصی که داره رنگ نمای بیرونی ساختمانه.(Property) ساختار کلاس به صورت زیر میتونیم یک کلاس جدید بسازیم : کد php: class MyClass با استفاده از کلمه کلیدی class سپس نام کلاس و آکولاد بازو بسته!! بعد از ساخت کلاس با استفاده از کلمه کلیدی new میتونیم این کلاس رو داخل یک متغیر بریزیم. کد php: $obj = new MyClass; برای مشاهده محتویات داخل یک کلاس از تابع var_dump() استفاده میکنیم : کد php: var_dump($obj) تعریف Properties در یک کلاس داده های یک کلاس در Property ها یا متغیرهای مخصوص کلاس نگهداری میشن.اینها دقیقا مشابه به متغیرهای معمولی عمل میکنن با این تفاوت که دسترسی به این متغیرها باید به واسطه شیء باشه. property ها در کلاس از قواعد کلی نام گذاری متغیر ها تبعیت میکنن. کد php: class MyClass کلمه کلیدی public نحوه دسترسی به متغیر $porp1 رو در خارج از کلاس مشخص میکنه.در بخشهای بعدیدر مورد نحوه دسترسی ها در شیء گرایی بیشتر صحبت میکنیم. برای دسترسی به متغیرهای داخل کلاس پس از اینکه یک شیء از یک کلاس ایجاد کردیم به صورت زیر متغیر مورد نظر رو فراخوانی میکنیم : کد php: echo $obj->prop1 ; کاراکترهای -> به منظور دسترسی به اعضای یک کلاس استفاده میشن.در کد بالا یعنی از شیء $obj متغیر $prop1 رو نمایش بده.میبینید که بعد از -> برای استفاده از متغیر $prop کاراکتر $ حذف شده. پس از اجرای کد بالا خروجی به شکل زیر خواهیم داشت I’m a class property! متدهای یک کلاس متد در واقع یک تابع است.هنگامی که یک تابع رو درون کلاس مینویسیم به اصطلاح بهش میگیم متد. اقداماتی که یک شیء انجام میده رو داخل متدها تعریف میکنیم. برای نمونه در کلاس بالا یک متد مینویسیم که مقدار متغیر(خاصیت یا property ) داخل کلاس رو تغییر بده. کد php: <?php در کد بالا میبینیم که ما نیاز داریم به متغیر $prop در متدهای setProperty و getProperty دسترسی داشته باشیم.با استفاده از کلیمه کلیدی $this میتونیم به اعضای داخل کلاس جاری دسترسی داشته باشیم.مثلا در کد بالا برای استفاده از متغیر $prop1 داخل متد getProperty باید از دستور $this->prop1 استفاده کنیم.این دستور به این معنیه که از همین(this) کلاس متغیرprop1 رو فراخوانی کن. برای فراخوانی یک متد بعد از ساخت یک شیء از کلاس مثل فراخوانی متغیرهای یک کلاس باید عمل کنیم. کد php: <?php پس از اجرای کد بالا خروجی به شکل زیر خواهید داشت: I'm a class property! I'm a new property value! یکی از قدرت های برنامه نویسی شیء گرا هنگامی مشاهده میشه که از یک کلاس چند نمونه(شیء) ایجاد میشه. کد php: <?php خروجی I'm a class property! I'm a class property! I'm a new property value! متدهای جادویی در php در مورد این متد ها قبلا به صورت مفصل بحث کردیم که میتونید در اینجا مشاهده کنید. ارث بری کلاسها میتونن متدها و متغیرها رو از بقیه کلاسها با استفاده از کلمه کلیدی extends به ارث ببرن. کد php: <?php خروجی The class "MyClass" was initiated! From a new method in MyOtherClass. I'm a class property! The class "MyClass" was destroyed. برای تغییر رفتار متغیر یا یک متد که از کلاس دیگه ای به ارث برده شده میتونیم با دوباره نوشتن متد یا متغیر مورد نظر رفتارش رو تغییر بدیم. به مثال زیر دقت کنید و اجراش کنید تا بیشتر متوجه منظور بشید : کد php: <?php خروجی A new constructor in MyOtherClass. From a new method in MyOtherClass. I'm a class property! The class "MyClass" was destroyed. یادآوری : __CLASS__ یک ثابت هست که نام کلاس جاری رو برمیگردونه. دسترسی به اعضای کلاس پدر برای دسترسی به اعضای کلاس پدر باید از کلمه کلیدی parent استفاده کنیم. کد php: class MyOtherClass extends MyClass استفاده از parent همیشه با دونقطه (: همراه خواهد بود. نحوه دسترسی به متدها و خواص(property) های یک کلاس برای کنترل بیشتر روی اشیاء میتونیم نحوه دسترسی به متدها و متغیرهای یک کلاس رو در خارج از کلاس مشخص کنیم. سه نوع دسترسی برای متغیرها و متدهای یک کلاس وجود داره. public : متغیرها و متدهایی که public هستند در خارج از کلاس هم میتونیم بهشون دسترسی داشته باشیم. protected : متغیرها و متدهایی که به صورت protected تعریف بشن فقط در کلاس جاری و در کلاسهای فرزند قابل دسترسی هستند . private : متغیر ها و متدهای private فقط داخل کلاس جاری در دسترس هستند. این سطح دسترسی ها برای اینه که ناخواسته (یا خواسته) اجازه نداشته باشیم بعضی از متدها یا متغیر های کلاس رو تغییر بدیم. ممکنه از خودتون بپرسید که این دسترسی ها به چه دردی میخوره چون خودم میدونم کلاسی که نوشتم رو چجوری استفاده کنم و از چه متدهاییش نباید استفاده کنم؟جواب این سوال اینه که شما فکر کنید قرار یک کلاس برای انجام کارهای معمول با دیتابیس میسازید.این کلاس متغیری داره برای نگهداری کانکشن.هنگامی که این متغیر به صورت public تعریف بشه ممکنه کاربران دیگه ای که میخوان از کلاس شما استفاده کنن خواسته یا نا خواسته بخوان این رشته اتصال رو تغییر بدن.در صورتی که این رشته اتصال نباید به صورت عمومی تعریف بشه تا همه بتونن تغیرش بدن. به مرور و در آموزشهای آبنده که در مورد برنامه نویسی شیء گرا در PHP قرار میدم با این سطح دسترسی ها بیشتر آشنا خواهید شد. به امید خدا در آینده به ادامه آموزش برنامه نویسی شیء گرا در PHP میپردازیم . اگر با سوال یا ابهامی در مورد برنامه نویسی شیء گرا برخوردید در قسمت نظرات یا ازطریق ایمیل بپرسید تا جایی که بتونم سعی میکنم راهنمایی تون کنم. I belong to the second instance! |