کلاس

کلاس به شما اجازه می‌دهد یک نوع داده‌ای که توسط کاربر تعریف می‌شود و شامل متغیرها و خواص (properties) و متدها است را ایجاد کنید. کلاس در حکم یک نقشه برای یک شیء می‌باشد. شیء یک چیز واقعی است که از ساختار، خواص و یا رفتارهای کلاس پیروی می‌کند. وقتی یک شیء می‌سازید یعنی اینکه یک نمونه از کلاس ساخته‌اید (در درس ممکن است از کلمات شیء و نمونه به جای هم استفاده شود). برای تعریف یک کلاس از کلمه کلیدی class استفاده شود :

class ClassName
{
    Variable1;
    Variable2;
    ...
    VariableN;

    method1;
    method2;
    ...
    methodN;
}

این کلمه کلیدی را قبل از نامی که برای کلاسمان انتخاب می‌کنیم می‌نویسیم. در نامگذاری کلاس‌ها هم از روش نامگذاری Pascal استفاده می‌کنیم. در بدنه کلاس متغیرها و متدهای آن قرار داده می‌شوند. متغیرها اعضای داده‌ای خصوصی هستند که کلاس از آنها برای رفتارها و ذخیره مقادیر خاصیت‌هایش (property) استفاده می‌کند. متدها رفتارها یا کارهایی هستند که یک کلاس می‌تواند انجام دهد. در زیر نحوه تعریف و استفاده از یک کلاس ساده به نام person نشان داده شده است :

  1: <?php
  2: 
  3:     class Person
  4:     {
  5:         public $name;
  6:         public $age;
  7:         public $height;
  8: 
  9:         public function TellInformation()
 10:         {
 11:            echo 'Name: '  . $this -> name .'<br/>';
 12:            echo 'Age:  '  . $this -> age .'<br/>';
 13:            echo 'Height: '. $this -> height;
 14:         }
 15:     }
 16: 
 17: 
 18:     $person1 = new Person();
 19:     $person2 = new Person();
 20: 
 21:     $person1 -> name = 'Jack';
 22:     $person1 -> age = 21;
 23:     $person1 -> height = 180;
 24:     $person1 -> TellInformation ();
 25: 
 26:     echo "<br/><br/>";//Separator
 27: 
 28:     $person2 -> name = 'Mike';
 29:     $person2 -> age = 23;
 30:     $person2 -> height = 158;
 31:     $person2 -> TellInformation ();
 32: 
 33: ?>
Name: Jack
Age: 21
Height: 160

Name: Mike
Age: 23
Height: 158

همانطور که در کد بالا مشاهده می‌کنید، در خطوط 15-3 کلاسی به نام Person تعریف شده است. در خط ۳ یک نام به کلاس اختصاص داده‌ایم تا به وسیله آن قابل دسترسی باشد. در داخل بدنه کلاس متغیرهای آن تعریف شده‌اند (خطوط 7-5). همچنین سطح دسترسی آنها را public تعریف کرده‌ایم تا در دیگر کلاسها قابل شناسایی باشند. درباره سطوح دسترسی در یک درس جداگانه بحث خواهیم کرد.

این سه متغیر تعریف شده خصوصیات واقعی یک فرد در دنیای واقعی را در خود ذخیره می‌کنند. یک فرد در دنیای واقعی دارای نام، سن و قد می‌باشد. در خطوط 14-9 یک متد هم در داخل کلاس به نام TellInformation() تعریف شده است که رفتار کلاسمان است و مثلاً اگر از فرد سوالی بپرسیم در مورد خودش چیزهایی می‌گوید. در داخل متد کدهایی برای نشان دادن مقادیر موجود در متغیرها نوشته شده است. نکته‌ای درباره متغیرها وجود دارد و این است که چون متغیرها در داخل کلاس تعریف و به عنوان اعضای کلاس در نظر گرفته شده‌اند، محدوده آنها یک کلاس است.

این بدین معناست که متغیرها فقط می‌توانند در داخل کلاس یعنی جایی که به آن تعلق دارند و یا به وسیله نمونه ایجاد شده از کلاس مورد استفاده قرار بگیرند. در خطوط 18 و 19 دو نمونه یا دو شیء از کلاس Person ایجاد می‌کنیم. برای ایجاد یک نمونه از یک کلاس باید از کلمه کلیدی new و به دنبال آن نام کلاس و یک جفت پرانتز قرار دهیم :

 18: $person1 = new Person();
 19: $person2 = new Person();

در خطوط 23-21 مقادیری به متغیرهای اولین شیء ایجاد شده از کلاس person1 اختصاص داده شده است. برای دسترسی به متغیرها یا متدهای یک شیء از علامت <- استفاده می‌شود. به عنوان مثال کد $person1 -> name نشان دهنده متغیر name از شیء person1 می‌باشد. برای چاپ مقادیر متغیرها باید متد TellInformation() شیء person1 را فراخوانی می‌کنیم (خط 24). به کلمه کلیدی this در خطوط 13-11 توجه کنید. این کلمه کلیدی اشاره به شیء جاری دارد. یعنی وقتی مقادیر از طریقشی person1 ارسال می‌شوند منظور از this شی person1 و وقتی از طریق شیء person2 ارسال می‌شوند منظور از this شیء person2 می‌باشد. همانطور که در خطوط 13-11، 23-21 و 30-28 مشاهده می‌کنید برای دسترسی به متغیرها، قبل از نام آنها علامت $ را به کار نمی‌بریم.

در خطوط 30-28 نیز مقادیری به شیء دومی که قبلاً از کلاس ایجاد شده تخصیص می‌دهیم و سپس متد TellInformation() را فراخوانی می‌کنیم. به این نکته توجه کنید که person1 و person2 نسخه‌های متفاوتی از هر متغیر دارند بنابراین تعیین یک نام برای person2 هیچ تاثیری بر نام person1 ندارد. و نکته آخر اینکه نام کلاس‌ها بر خلاف متغیرها به بزرگی و کوچکی حروف حساس نیست یعنی یک شیء را به دو صورت زیر می‌توان از کلاس ایجاد کرد :

$person = new Person();
$person = new PERSON();

در مورد اعضای کلاس در درسهای آینده توضیح خواهیم داد.