با عرض سلام و خسته نباشید خدمت شما که تا این قسمت، یعنی قسمت پایانی، از سری آموزشی برنامه نویسی شیء گرای PHP با ما همراه بودید. شما تا این قسمت با تمام مفاهیم اصلی و پایه و حتی اکثر مفاهیم پیشرفته ی برنامه نویسی شیء گرا در PHP آشنا شده اید و برای خودتان یک برنامه نویس حرفه ای هستید!
اما یادتان باشد که تنها خواندن این تمرینات به شما هیچ کمکی نمی کند، بلکه باید کد نویسی کنید؛ برای خود پروژه های فرضی تعریف کنید و آن ها را پیاده سازی نمایید، کد های دیگران را بررسی و بازنویسی کنید و آن قدر بنویسید که دیگر برای نوشتن کد، نیازی به نگاه کردن به هیچ آموزشی نداشته باشید. در این صورت شما می توانید وارد بازار کار شوید!
در این قسمت که قسمت پایانی دوره ی شیء گرایی خواهد بود به بررسی چند مسئله ی جزئی دیگر می پردازیم.
متدهای جادویی نوع خاصی از متدهای رزرو شده توسط PHP هستند که با دو آندرلاین شروع می شوند.
چرا به آن ها جادویی میگوییم؟ به این خاطر که این متدها در موقعیت های خاصی به صورت خودکار صدا زده می شوند. ما میخواهیم چند مورد از متدهای جادویی را به طور خلاصه با هم مرور کنیم:
این متد جادویی زمانی صدا زده می شود که یک شیء ساخته شود (در جلسات قبل در مورد این متد صحبت کردیم، رجوع کنید به این مقاله). مثال:
class Animal{ public function __construct() { $this->created = time(); $this->logfile_handle = fopen('/tmp/log.txt', 'w'); } }
این متد دقیقا برعکس constructor عمل می کند و زمانی صدا زده می شود که شیء نابود شود. مثال:
class Animal{ public function __construct() { $this->created = time(); $this->logfile_handle = fopen('/tmp/log.txt', 'w'); } public function __destruct() { fclose($this->logfile_handle); } }
اگر یادتان باشد در PHP نمی توان آرایه ها را با دستور هایی مانند echo یا print چاپ کرد.
اگر چنین دستور هایی را برای اشیاء به کار ببرید نتیجه بدتر خواهد بود.
مشکل اینجاست که در برخی از مواقع نیاز داریم تا اشیاء را به شکل رشته ببینیم.
اینجا PHP با ارائه ی این متد با ما کمک می کند! اینکه این متد چه قسمتی از شیء را به صورت رشته برمیگرداند کاملا به ما بستگی دارد. چرا که ما چنین چیزی را به این متد دیکته می کنیم.
مثال فروشگاه را از قسمت های قبل به یاد دارید؟ حالا به مثال زیر توجه کنید:
class Ch2_Book extends Ch2_Product { // متدها و خصوصیات از قبل تعریف شده public function __toString() { return $this->_title; } }
در این مثال به متد ()toString__ دستور دادیم که title (عنوان) کتاب را به صورت رشته ای به ما برگرداند. شما می توانید این کد را بر اساس نیاز خودتان تغییر دهید.
نکته: در داخل این متد از دستوراتی مثل echo و print استفاده نکنید. این متد باید رشته را برگرداند (return) نه اینکه نمایش دهد.
از PHP5 به بعد زمانی که یک شیء را به یک متغیر نسبت می دهید، آن شیء برای متغیر کپی نمی شود بلکه به نوعی یک ارجاع به شیء اصلی است. این مثال را در نظر بگیرید:
$x = new MyObject(); $y = $x;
از آنجایی که انتساب شیء به متغیر فقط یک ارجاع است هر تغییری که در شیء y بدهیم در شیء x هم ایجاد می شود. برای حل این مشکل می توانید از شیء خود کپی بگیرید تا هنگام انتساب یک کپی جداگانه به متغیر داده شود، نه یک ارجاع. مثال:
$y = clone $x;
به مثال زیر دقت کنید. در این مثال می خواهیم برای هر دستگاهی که ساخته می شود یک باتری جداگانه داشته باشیم (ارجاعی نباشد):
class Device { ... public function __clone() { // شی خود را کپی می کنیم $this->battery = clone $this->battery; } ... }
حالا می توانیم برای هر دستگاهی که ساخته می شود یک باتری جداگانه در نظر بگیریم.
با یک سرچ ساده می توانید به این متدهای جادویی دسترسی داشته باشید. از آن جایی که این متدها پیچیدگی خاصی ندارند و تا این قسمت تمام مطالب پایه ی برنامه نویسی شیء گرا را به شما تقدیم کرده ایم، نام بردن تک تک این متدها فقط زیاده گویی است. برای شروع می توانید به صفحه ی متدهای جادویی در سایت رسمی PHP مراجعه کنید.
کامنت های DocBlock در حالی که به صورت رسمی جزوی از PHP نیستند اما به صورت گسترده توسط برنامه نویسان استفاده می شوند. ساختار کلی کامنت های DocBlock به شکل زیر است:
/** * This is a very basic DocBlock */
دلیل اصلی استفاده از این کامنت ها قدرت آن ها در استفاده از تگ ها است.
این تگ ها که با علامت @ شروع می شوند به توسعه دهندگان اجازه می دهند نویسنده ی یک فایل را مشخص کنید، موارد قانونی و مربوط به لایسنس یک اسکریپت را مشخص کنید، اطلاعاتی راجع به متدها یا خصوصیات ارائه دهید و بسیاری دیگر از اطلاعات مفید...
شایع ترین تگ های DocBlock عبارتند از:
author@: نویسنده ی عنصر فعلی (چه کلاس باشد، چه متد، چه قسمتی از کد و ...) را مشخص می کند
copyright@: موارد مربوط به کپی رایت و سال کپی رایت را ذکر می کند.
license@: لینک لایسنس عنصر فعلی را مشخص می کند. ساختار این لایسنس باید به شکل زیر باشد:
http://www.example.com/path/to/license.txt License Name
var@: نوع و توضیحات مربوط به یک متغیر را ذکر می کند.
param@: نوع و توضیحات مربوط به یک پارامتر را ذکر می کند.
return@: نوع و توضیحات مربوط به مقدار برگردانده شده (return) را ذکر می کند.
تمام این موارد را در مثال زیر می بینید:
<?php /** * A simple class * * This is the long description for this class, * which can span as many lines as needed. It is * not required, whereas the short description is * necessary. * * It can also span multiple paragraphs if the * description merits that much verbiage. * * @author Jason Lengstorf <jason.lengstorf@ennuidesign.com> * @copyright 2010 Ennui Design * @license http://www.php.net/license/3_01.txt PHP License 3.01 */ class SimpleClass { /** * A public variable * * @var string stores data for the class */ public $foo; /** * Sets $foo to a new value upon class instantiation * * @param string $val a value required for the class * @return void */ public function __construct($val) { $this->foo = $val; } /** * Multiplies two integers * * Accepts a pair of integers and returns the * product of the two. * * @param int $bat a number to be multiplied * @param int $baz a number to be multiplied * @return int the product of the two parameters */ public function bar($bat, $baz) { return $bat * $baz; } } ?>
اما کلام پایانی و سوالاتی که اکثر دانشجویان از من میپرسند:
آیا این پایان برنامه نویسی شیء گرا است؟
خیر! برنامه نویسی شیء گرا دنیای بزرگی است و ذکر تمام جزئیات و تک تک موارد در یک آموزش نمی گنجد. این سری آموزشی بستر مناسبی برای پیشرفت شما فراهم کرد کما اینکه حدود 70 تا 80 درصد مطالب اصلی برنامه نویسی شیء گرا در PHP را یاد گرفته اید.
آیا دیگر دوره/مقاله ای در زمینه ی برنامه نویسی شیء گرای PHP نخواهیم داشت؟
حالا که این دوره به اتمام رسیده، سعی بنده این است که یک دوره ی کوتاه در رابطه با رابط PDO (ارتباط شیء گرا با پایگاه داده) را منتشر کنم. از طرفی ممکن است برخی از مطالب برنامه نویسی شیء گرا را به صورت مقالات جداگانه بنویسم چرا که جای مناسبی در این دوره ی آموزشی (که از صفر شروع میکند) برای آنها ندیدم. بنابراین هنوز دوره ها یا مقالاتی مانده است که ممکن است در آینده و به تدریج تقدیم شما شود.
وضعیت بازار کار برای برنامه نویسی شیء گرا چطور است؟
اگر بخواهید در شرکت های بزرگ استخدام شوید معمولا اکثر آن ها از شما میپرسند که آیا با برنامه نویسی شیء گرا آشنایی دارید یا خیر. چرا؟ به این دلیل که پروژه های شرکتی و بزرگ (مانند روکسو، دیجیکالا و امثال آن) با برنامه نویسی رویه ای جلو نمی رود. نوشتن چنین پروژه هایی به صورت ساده و رویه ای (در صورتی که با زبان PHP باشد) عملا خودکشی برای تیم برنامه نویسی محسوب می شود! با یاد گرفتن PHP به صورت شیء گرا نه تنها از مزایای طبیعی آن (امنیت، افزایش سرعت کدنویسی، نظم و ...) برخوردار می شوید بلکه در بازار کار جایگاه بهتری پیدا می کنید.
اگر شیء گرا بنویسم دیگر به برنامه نویسی رویه ای احتیاجی ندارم؟
برخی اوقات استثنائاتی وجود دارند و ممکن است ما استفاده از برنامه نویسی رویه ای را در برخی از پروژه ها یا حتی در قسمتی از پروژه های شیء گرا ترجیح بدهیم. با اینکه چنین موقعیت هایی بسیار کم پیش می آیند اما نمی توان گفت همیشه و 100% از تمام و تک تک برنامه ها و پروژه های شما شیء گرا خواهند بود!
در آخر از شما متشکرم که تا این قسمت همراه بنده بوده اید. به شما توصیه می کنم به آموزش های دیگر دوستان بنده در این وب سایت حتما سری بزنید و از آن ها استفاده کنید. برخی از دوره ها و مقالات خوب دیگر در این وب سایت را که از نظر خودم برای شما بسیار مفید خواهد بود، لینک می کنم:
و بسیاری از مطالب مفید دیگر که با جست و جوی ساده در وب سایت برای شما قابل دسترسی است. همچنین برای پرسیدن سوالات خود می توانید از قسمت کامنت ها و مخصوصا از بخش روکسو کیو استفاده کنید.
در پناه حق.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.