سازنده
سازندهها متدهای خاصی هستند که وجود آنها برای ساخت اشیاء لازم است. آنها به شما اجازه میدهند که متغیرهای کلاس را مقداردهی اولیه کنید و کدهایی که را که میخواهید هنگام ایجاد یک شیء اجرا شوند را به برنامه اضافه کنید. اگر از هیچ سازندهای در کلاستان استفاده نکنید، PHP از سازنده پیشفرض که یک متد بدون پارامتر است استفاده میکند. در مثال زیر یک کلاس که شامل سازنده پیشفرض (خطوط 12-9) است را مشاهده میکنید :
1 <?php 2 3 class Person 4 { 5 public $name; 6 public $age; 7 public $height; 8 9 public function Person() 10 { 11 12 } 13 14 public function TellInformation() 15 { 16 echo 'Name: ' . $this -> name .'<br/>'; 17 echo 'Age: ' . $this -> age .'<br/>'; 18 echo 'Height: '. $this -> height; 19 } 20 } 21 22 $person1 = new Person(); 23 var_dump ($person1); 24 25 ?>
object(Person)[1] public 'name' => null public 'age' => null public 'height' => null
میتوانیم این سازنده را هم تعریف نکنیم چون PHP به طور خودکار آن را ایجاد میکند. همانطور که در خط 22 و 23 مشاهده میکنید ما یک شیء یا یک نمونه از کلاس ایجاد کردهایم (در درس بعد بیشتر توضیح میدهیم) و با استفاده از تابع var_dump مقادیر موجود در این شیء را چاپ کردهایم. در خروجی مشاهده میکنید که سازنده پیشفرض به هر سه متغیر مقدار null را اختصاص داده است. مثلاً بهتر است که با استفاده از سازنده مقدار پیشفرض به متغیرها اختصاص دهیم. مثلاً فردی که به دنیا میآید نام (name) ندارد ولی سن (age) و قد (height) دارد. پس میتوانیم به صورت زیر این مقادیر را به متغیرها با استفاده از سازنده پیشفرض اختصاص دهیم :
1 <?php 2 3 class Person 4 { 5 public $name; 6 public $age; 7 public $height; 8 9 public function Person() 10 { 11 $this -> name =''; 12 $this -> age = 9; 13 $this -> height = 30; 14 } 15 16 public function TellInformation() 17 { 18 echo 'Name: ' . $this -> name .'<br/>'; 19 echo 'Age: ' . $this -> age .' Month'.'<br/>'; 20 echo 'Height: '. $this -> height .' cm'; 21 } 22 } 23 24 $person1 = new Person(); 25 $person1 -> TellInformation (); 26 27 ?>
Name: Age: 9 Month Height: 30 cm
به این نکته توجه کنید که سازنده درست شبیه به یک متد است با این تفاوت که
- مقدار برگشتی ندارد.
- نام سازنده باید دقیقاً شبیه نام کلاس باشد.
حال فرض کنید میخواهیم سازندهای ایجاد کنیم که بعد از ایجاد یک شیء از کلاس، متغیرهای شیء ایجاد شده را خودمان و با استفاده از سازندهای که تعریف کردهایم مقداردهی کنیم. به کد زیر توجه کنید :
1 <?php 2 3 class Person 4 { 5 public $name; 6 public $age; 7 public $height; 8 9 public function Person($n, $a, $h) 10 { 11 $this -> name = $n; 12 $this -> age = $a; 13 $this -> height = $h; 14 } 15 16 public function TellInformation() 17 { 18 echo 'Name: ' . $this -> name .'<br/>'; 19 echo 'Age: ' . $this -> age .'<br/>'; 20 echo 'Height: '. $this -> height; 21 } 22 } 23 24 $person1 = new Person("Jack", 21, 160); 25 $person1 -> TellInformation(); 26 27 echo '<br/><br/>'; 28 29 $person2 = new Person("Mike", 32, 158); 30 $person2 -> TellInformation(); 31 32 ?>
Name: Jack Age: 21 Height: 160 Name: Mike Age: 32 Height: 158
همانطور که مشاهده میکنید در مثال بالا سازندهای را سه آرگومان قبول میکند به کلاس Person اضافه کردهایم (خطوط 14-9). در خطوط 24 و 29 بعد از ایجاد شیء و در داخل پرانتزها سه مقدار را به سازنده (خط 9) ارسال میکنیم و سازنده این مقادیر را به متغیرها (خطوط 7-5) اختصاص میدهد.