ترکیب (Composition)

ترکیب یا Composition فرایندی است که طی آن یک کلاس به عنوان یک عضو به کلاس دیگر اضافه می شود. دستور کلی ترکیب دو کلاس به صورت زیر است :

class A
{
}

class B
{
    public function __construct()
    {
        $this-> A = new A();
    } 
}

به عنوان مثال، به کد زیر توجه کنید. در این کد کلاس Person می تواند یک فیلد از نوع کلاس Name داشته باشد:

  1: <?php
  2:     class Name
  3:     {
  4:         public $FirstName;
  5:         public $LastName;
  6: 
  7:         public function __construct($f, $l)
  8:         {
  9:             $this-> FirstName = $f;
 10:             $this-> LastName  = $l;
 11:         }
 12:     }
 13: 
 14:     class Person
 15:     {
 16:         private $Name;
 17: 
 18:         public function __construct(Name $name)
 19:         {
 20:             $this-> Name = new Name($name-> FirstName, $name-> LastName);
 21:         }
 22: 
 23:         public function fullName()
 24:         {
 25:             return $this-> Name-> FirstName . " " . $this-> Name-> LastName;
 26:         }
 27:     }
 28: 
 29:     $person1 = new Person(new Name("John", "Smith"));
 30: 
 31:     echo $person1-> fullName();
 32: ?>

حال برنامه را توضیح می دهیم. یک کلاس که قرار است به عنوان یک فیلد در کلاس دیگر به کار رود را تعریف می کنیم (خطوط 12-2). این کلاس دارای یک سازنده است که نام (f) و نام خانوادگی (l) را از شخص دریافت می کند. سپس این مقادیر را در خصوصیت های متناظر با آنها قرار می دهیم(خطوط 10-9). در خطوط 27-14 یک کلاس به نام Person تعریف کرده ایم. این کلاس شامل یک فیلد (خط 20) بوده که در خط 20 آن را با یک شیء از کلاس Name مقدار دهی کرده ایم. به این فرایند ترکیب (Composition) می گویند.
همچنین در کلاس Person متد ()fullName را تعریف کرده ایم (خطوط 26-23)، به طوری که در هنگام فراخوانی این متد، نام کامل شخص را نمایش داده می شود. در بالا یک شی Person را ایجاد و از سازنده ای که یک شی از نوع کلاس Name به عنوان آرگومان قبول می کند (خط 29)، استفاده کرده ایم. این شی را مستقیما در داخل پرانتز ها تعریف و همچنین مقادیر خصوصیات firstname و lastname را به آن ارسال کرده ایم. در نهایت، با استفاده از متد ()fullName نتیجه را چاپ می کنیم.