با قسمت دوم از سری برنامه نویسی شیء گرای PHP در خدمت شما هستیم. در این قسمت قصد داریم تا به سراغ کدنویسی رفته و از مباحث اولیه جلوتر برویم. اگر با مباحث اولیه آشنا نیستید می توانید قسمت اول این سری را مطالعه کنید.
نکته: همانطور که در قسمت اول گفته شد، این سری از آموزش ها برای افرادی که هیچ آشنایی با زبان PHP ندارند مناسب نیست. برای استفاده ی کامل از این سری آموزشی باید آشنایی حداقلی با مفاهیم برنامه نویسی (مخصوصا برنامه نویسی PHP) داشته باشید.
تعریف یک کلاس در PHP با کلمه ی class و سپس دو عدد آکولاد ({}) شروع می شود. این آکولاد ها شامل constant ها (ثابت ها) و متغیر ها (همان "خصوصیات" که در قسمت قبل اشاره شد) و توابع (همان "متد ها") می شوند.
نکته: تمام متغیر های یک کلاس property (خصوصیت) نیستند بلکه یک property نوعی خاص از یک متغیر است. در آینده به سادگی متوجه این تفاوت می شوید.
نکته: در برنامه نویسی PHP عبارت “property” با عبارت “attribute” و عبارت “method” با عبارت “operation” یکی در نظر گرفته می شود. اگر در منابع دیگر این کلمات را به جای هم دیدید تعجب نکنید!
بنابر چیزی که گفته شد ساختار یک کلاس خالی و ساده در PHP به این شکل است:
<?php class Myclass { // Add property statements here // Add the methods here } ?>
نکات مهم در مورد کلاس ها:
حالا یک مثال (مثال شماره 1) میزنیم:
<?php $myobj = new MyClass; ?>
با استفاده از کد بالا یک instance (همان شیء یا نمونه) از کلاس Myclass ساختیم و از آنجا که این نمونه را خارج از کلاس ساختیم از کلمه ی new استفاده کردیم.
از کجا بدانیم خارج از کلاس بوده است؟ اگر دقت کنید قبلا کلاس Myclass را تعریف کردیم و داخلش چیزی نگذاشتیم (یعنی بین دو آکولاد را خالی گذاشتیم). داخل آکولاد یعنی داخل کلاس!
حالا به $myobj
دقت کنید. همانطور که میبینید دقیقا مانند یک متغیر عادی در PHP است، اما یک متغیر عادی نیست بلکه یک شیء است. این شیء به ما اجازه ی دسترسی به تمام متد های کلاس Myclass را میدهد؛ بدون داشتن این شیء شما به هیچ عنوان نمی توانید از این متد ها استفاده کنید.
اگر برای تست این شیء را داخل دستور var_dump() قرار دهیم خروجی زیر را میگیریم:
var_dump($myobj);
خروجی:
object(Myclass)#1 (0) { }
تا اینجا با کلیت کلاس و شیء آشنا شدیم و یک مثال هم از آن بیان کردیم. حالا باید برویم سراغ property ها و method ها، اما قبل از آن چند کلام حرف خودمانی!
اگر کمی گیج شده اید، باید بگویم کاملا طبیعی است؛ این روش یک روش متفاوت برنامه نویسی است و اگر شما تا به حال با آن آشنایی نداشته اید احتمالا در اوایل کار برایتان گیج کننده خواهد بود.
نکته ای که باید به آن توجه کنید این است که با جلو رفتن مطالب شما کاملا به آن مسلط می شوید و ابهامات ذهنی شما به علت ندانستن کامل موضوع است نه سخت بودن آن.
قبلا در مورد اینکه property چیست، صحبت کردیم. باید بدانید property ها داده های مرتبط با کلاسی که در آن تعریف شده اند را در خودشان نگه می دارند. برای ایجاد این property ها در یک کلاس باید از یکی از سه واژه ی public، protected یا private استفاده کرده و سپس یک متغیر عادی تعریف کرد. اگر متغیر را با کلمه ی کلیدی var بسازید، آن property به صورت خودکار public خواهد شد. معنی این کلمات از قرار زیر است:
مثال: زمانی که یک نمونه از یک کلاس ساخته شد می توانید به هر property آن با استفاده از الگوی زیر دست پیدا کنید:
Object->
به مثال زیر (مثال شماره 2) دقت کنید:
<?php class Myclass { public $font_size =10; } $f = new MyClass; echo $f->font_size; ?>
در این مثال ما کلاسی به اسم Myclass تعیین کردیم و یک Property یا خصوصیت به نام $font_size
در آن قرار دادیم و مقدار آن را هم 10 گذاشتیم.
توجه کنید چون ما به زبان فارسی توضیح می دهیم معمولا علامت دلار $ جلوی عبارت قرار می گیرد و صحیح نیست اما در کدنویسی چون متن چپ چین است مشکلی پیش نمی آید
حالا برای اینکه به این Property دسترسی داشته باشیم اول یک نمونه از کلاسِ Myclass را به نام $f
می سازیم؛ باید تا الان یاد گرفته باشید که $f
یک شیء یا نمونه از کلاسِ Myclass است. بر اساس الگوی object->
می نویسیم: $f->font_size
. بنابراین در ادامه با این دستور، مقدار font_size
به شیء $f
داده می شود. حالا برای آنکه این مقدار را روی صفحه ببینیم دستور echo را هم در اول دستور قرار می دهیم. خروجی این دستور عدد 10 می باشد.
نکتهی مهم: بسیاری از برنامه نویسان این اشتباه را می کنند که دستور فوق را به صورت زیر می نویسند:
echo $f->$font_size
چرا چنین دستوری غلط است؟ علامت دلار در زمان تعریف یک خصوصیت در خودِ کلاس آورده میشد نه در زمان استفاده از آن. زمانی که بخواهیم به یک خصوصیت دسترسی داشته باشیم تنها اسم آن را (بدون علامت دلار) می آوریم.
میدانیم که متد ها همان توابع در داخل کلاس ها هستند؛ در واقع این متد ها عیناً همان توابع در PHP هستند. برای ایجاد یک متد در یک کلاس از یکی از کلمات کلیدی زیر استفاده کنید و سپس متد را مانند یک تابع عادی تعریف کنید:
اگر در هنگام تعریف متد از هیچ کدام از این سه کلمه ی کلیدی استفاده نکنید، حالت پیش فرضِ متد public خواهد بود.
همچنین برای نام گذاری متد ها مانند نام گذاری کلاس ها عمل کنید؛ یعنی نام گذاری متد ها باید به این شکل باشد:
شروع نام با حروف انگلیسی یا آندرلاین + حروف یا اعداد یا آندرلاین
توجه کنید که نیازی نیست تمام این موارد در اسم یک متد یا کلاس باشد. این فقط یک فرمول کلی است؛ یعنی اگر مثلا در نام متد از اعداد استفاده نکردید مشکلی ندارد و این موارد اجباری نیستند (به غیر از پیروی از الگوی کلی).
شروع تعریف متد با "{" و پایان آن هم با "}" است. همانطور که در قسمت اول گفتیم، نام این علامت curly braces است و نباید آن را با براکت ([]) اشتباه گرفت.
به مثال زیر (مثال شماره 3) دقت کنید. در این مثال میخواهیم متدی تعریف کنیم که رشته ای را با اندازهی فونت و رنگ خاصی چاپ کند و آن را داخل یک تگ <p> قرار دهد.
<?php class Myclass { public $font_size ="18px"; public $font_color = "blue"; public $string_name = "roxoAcademy"; public function customize_print() { echo "<p style=font-size:".$this->font_size.";color:".$this->font_color.";>".$this->string_name."</p>"; } } $f = new MyClass; echo $f->customize_print(); ?>
خروجی این دستور عبارت roxoAcademy با رنگ آبی و فونت 18 خواهد بود که داخل تگ <p> قرار داده شده است.
حال سوالی که پیش می آید این است که ما گفتیم از الگوی object-> برای دسترسی به متد ها یا خصوصیات یک کلاس استفاده می کنیم. آیا می توانیم از طریق این دسترسی، property ها را تغییر دهیم؟ جواب بله است! برای مثال کد قبلی را عیناً می نویسیم و سپس مقادیر property ها را تغییر می دهیم.
<?php class Myclass { public $font_size ="18px"; public $font_color = "blue"; public $string_name = "roxoAcademy"; public function customize_print() { echo "<p style=font-size:".$this->font_size.";color:".$this->font_color.";>".$this->string_name."</p>"; } } $f = new MyClass; $f->font_size = "20px"; $f->font_color = "red"; $f->string_name = "PHP OOP with Amir Zouerami"; echo $f->customize_print(); ?>
خروجی این کد عبارت PHP OOP with Amir Zouerami خواهد بود که فونت 20 و رنگ قرمز خواهد داشت.
تا این قسمت آشنایی نسبی خوبی با نکات اساسی برنامه نویسی شیء گرا پیدا کردیم. در قسمت های بعدی با مفاهیم پیشرفته تر و مثال های بیشتری در خدمت شما خواهیم بود و همین مباحث را به صورت ریز تر و با جزئیات بیشتر مورد بررسی قرار خواهیم داد.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.
در این قسمت، به پرسشهای تخصصی شما دربارهی محتوای مقاله پاسخ داده نمیشود. سوالات خود را اینجا بپرسید.