یادآوری از OOP (بخش اول)

(An Overview of PHP Object-Oriented Programming (Part 1

20 شهریور 1398

یادآوری از برنامه نویسی شی گرای PHP

در این قسمت و چند قسمت بعد مروری بر برنامه نویسی شی گرای PHP خواهیم داشت تا در قسمت های کدنویسی پروژه دچار مشکل نشویم. توجه داشته باشید که در این قسمت:

  • قصد درس دادن کامل و مجدد شی گرایی را نداریم (فقط مرور کوتاه). برای یادگیری به سری شی گرایی مراجعه کنید.
  • فریم ورک یا شبکه اجتماعی را کدنویسی نمیکنیم و بر روی شی گرایی تمرکز خواهیم داشت.
  • با کلاس ها، خصوصیت ها و متدها آشنا خواهیم شد.
  • در مورد مفاهیم وراثت، متد های جادویی، Access Modifier ها و... صحبت خواهیم کرد.
  • در مورد متدها و خصوصیت های static نیز صحبت می کنیم.
  • اگر با برنامه نویسی شی گرایی آشنایی کامل دارید می توانید این قسمت ها را نادیده گرفته و به قسمت کدنویسی بروید. اما پیشنهاد ما این است که این قسمت ها را نیز مطالعه کنید چرا که یادآوری و مرور خوبی برایتان خواهد بود.

در این قسمت سعی می کنم موضوعات را به صورت موردی توضیح بدهم تا حالت خلاصه داشته باشند و در عین حال یادآور کلیه مسائل اصلی شی گرایی باشند.

برنامه نویسی شی گرایی (Object Oriented Programming) چیست؟

برنامه نویسی شی گرایی، متدی برای کدنویسی نرم افزارها و برنامه های شما است. این روش، روش خلاصه و بسیار جمع و جوری محسوب شده که در آن به جای استفاده از توابع و رویه ها از اشیاء (object) استفاده می شود. در این نوع برنامه نویسی ساختارهای داده به صورت شی در دسترس ما هستند و هر کدام دارای خصوصیات (property) و متد (method) های خاص خودشان می باشند.

باید بدانید که برنامه نویسی شی گرا (OOP) مخصوص زبان PHP نیست، بلکه زبان PHP به طور 100 درصد شی گرا نیست و می تواند به صورت رویه ای (procedural) یا شی گرا (Object Oriented) نوشته شود. زبان های مانند جاوا و #C صد در صد و کاملا شی گرا هستند و دیگر نمی توانید با آن ها برنامه نویسی رویه ای کار کنید.

چرا باید از OOP استفاده کنیم؟

زبان PHP آزادی زیادی به شما می دهد تا جایی که می توانید کدهای در هم ریخته و شلوغی بنویسید. به این نوع کدها spaghetti code می گوییم. با استفاده از شی گرایی زبان PHP می توانیم تا حد بسیار زیادی این مشکل را رفع کنیم. از مزایای استفاده از برنامه نویسی شی گرا می توان به موارد زیر اشاره کرد:

  • کدهای تمیزتر و سازماندهی شده
  • کدنویسی به شکل ماژولار (تکه تکه)
  • آسان تر برای کار تیمی و ساماندهی تیم ها
  • قابلیت استفاده مجدد
  • مدیریت و نگهداری ساده تر

تفاوت بین کلاس و شی چیست؟

برخی اوقات افراد کلاس و شی را با هم قاطی می کنند. بهتر است اینطور فکر کنید:

کلاس یک نقشه برای شی است! به طور مثال یک نقشه خانه داریم و بر اساس این نقشه و اطلاعات آن، خانه (شی) را می سازیم. این نقشه دارای دستورالعمل هایی است (مانند «در را اینطور بساز» یا «حیاط را این رنگی کن» و ...) که به آن ها متد می گوییم. از طرفی هر خانه خصوصیاتی دارد (مثلا رنگ دیوار ها، نوع سنگ فرش، اندازه اتاق ها و ...) که به این ها «خصوصیت» یا property می گوییم.

همچنین همانطور که می توانیم از یک نقشه صد ها خانه بسازیم، می توانیم از یک کلاس نیز صدها شی بسازیم. به عمل ساختن شی از یک کلاس instantiate کردن می گویند. instance یا نمونه‌ی یک کلاس، یعنی شی ای که از آن کلاس ساخته شده است.

توضیحات عملی

توضیحات تئوری ما کافی نیستند چرا که مبحث شی گرایی باید عملی یاد گرفته شود بنابراین می خواهیم کمی کنیم. ابتدا وارد پوشه htdocs در XAMPP شوید (ر.ک به قسمت قبل). در همانجا پوشه ای دلخواه بسازید (من نام آن را oopSandbox می گذارم). حالا یک فایل در این قسمت بسازید (من نام این فایل را 2_3.php می گذارم.

برای اطمینان از سالم بودن XAMPP و اجرای کدها ابتدا کد زیر را در فایل خود نوشته و آن را در مرورگر به آدرس localhost/oopsandbox/2_3.php باز کنید:

<?php
echo 'test';

بعد از رفتن به آدرس ذکر شده، مرورگر باید عبارت test را نشان دهد. زمانی که عبارت test را مشاهده کردید یعنی همه چیز کار می کند بنابراین آن را پاک کنید.

حالا بیایید یک کلاس به نام user بسازیم. برای این کار باید از کلیدواژه class استفاده کنیم:

class User {

  }

حالا می توانیم یک property به آن اضافه کنیم:

   // تعریف کردن کلاس
  class User {

    // Properties خصوصیات یا
    public $name = 'brad';
  }

در اینجا خصوصیت نام را تعریف کردیم و به آن مقدار brad را داده ایم. حالا یک شی از این کلاس می سازیم:

   // تعریف کردن کلاس
  class User {

    // Properties خصوصیات یا
    public $name = 'brad';
  }

// ساخت نمونه از کلاس مورد نظر
  $user1 = new User();

برای نمایش این شی در مرورگر می توانیم کد زیر را هم اضافه کنیم:

   // تعریف کردن کلاس
  class User {

    // Properties خصوصیات یا
    public $name = 'brad';
  }

// ساخت نمونه از کلاس مورد نظر
  $user1 = new User();

// گرفتن خروجی از شی جدید
  echo $user1->name;

این از خصوصیت ها. حالا یک متد برای این کلاس تعریف می کنیم؛ کار این متد این است که بگوید فلانی (this->name) سلام می کند (says hello):

  // تعریف کردن کلاس
  class User {
    //   Properties خصوصیات یا

    public $name = 'brad';

    //  Methods متد ها یا

    public function sayHello(){
      return $this->name .' Says Hello';
    }
  }

$user1 = new User();
  echo $user1->name;
  echo '<br>';
  echo $user1->sayHello();

خروجی این دستور می شود: Brad says hello

مشکل آنجاست که اگر به همین شکل صد کاربر دیگر هم بسازیم، نام تمام آن ها brad خواهد بود اما می دانیم که نام افراد فرق می کند بنابراین نوشتن این کد به این شکل کار درستی نیست. برای تصحیح این مسئله در قسمت ;'public $name = 'brad کد را به ;public $name تغییر می دهیم تا نام پیش فرضی نداشته باشیم بلکه فقط متغیر نام را تعریف کرده باشیم (یعنی هر فردی نامی دارد اما فعلا نام هایشان مشخص نیست).

از آنجا که به متغیر name مقدار public داده ایم می توانیم خارج از کلاس آن را تغییر دهیم. بنابراین کد بدین شکل خواهد شد:

<?php
  // تعریف کردن کلاس
  class User {
    //   Properties خصوصیات یا

    public $name;

    //  Methods متد ها یا

    public function sayHello(){
      return $this->name .' Says Hello';
    }
  }

  // ساخت نمونه از کلاس مورد نظر
  $user1 = new User();
  $user1->name = 'Brad';
  echo $user1->name;
  echo '<br>';
  echo $user1->sayHello();

  echo '<br>';
  // ساخت نمونه دوم از کلاس مورد نظر
  $user2 = new User();
  $user2->name = 'Jeff';
  echo $user2->name;
  echo '<br>';
  echo $user2->sayHello();

تا همین قسمت برای این جلسه کافی است.

توجه: این قسمت تنها یک یادآوری بود بنابراین اگر به توضیحات بیشتر و کامل تری نیاز دارید به سری آموزشی برنامه نویسی شی گرای PHP مراجعه کنید.

دانلود فایل این جلسه

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش ساخت شبکه اجتماعی توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما (2 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

ronak
24 شهریور 1398
فقط میتونم بگم عالیه!منتظر ادامه آموزش هستیم، ممنون از شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
26 شهریور 1398
سلام دوست عزیز، نظر لطف شماست.

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

سامان
21 شهریور 1398
بی صبرانه منتظر این دوره هستم! واقعا عالی هست

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

امیر زوارمی
22 شهریور 1398
سلام دوست عزیز، خوشحالم که توجه شما رو جلب کرده

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.