trait

یکی از مشکلات PHP این است که از وراثت چندگانه پشتیبانی نمی‌کند. یعنی هر کلاس فقط می‌تواند از یک کلاس ارث بری کند. بعضی مواقع ارث بری از چند کلاس می‌تواند باعث کاهش کدنویسی شود. در PHP 5.4 قابلیتی با نام trait اضافه شده است که این مشکل را برطرف می‌کند. Trait گروهی از متدها هستند که می‌توان در داخل کلاس‌ها از آنها استفاده کرد. یا به عبارت دیگر می‌توان چندین متد در که قرار است در داخل چند کلاس مورد استفاده قرار گیرند را در داخل یک trait قرار داد. این کار باعث کاهش کدنویسی شده و مشکل وراثت چندگانه را برطرف می‌کند. از trait ها همانند کلاس‌های انتزاعی نمی‌توان نمونه ایجاد کرد. برای ایجاد یک trait به صورت زیر عمل می‌شود :

trait traitname
{
   // code here...
}

همانگونه که در کد بالا مشاهده می‌کنید برای ایجاد trait از کلمه کلیدی trait استفاده می‌شود و سپس یک نام برای آن انتخاب می‌کنیم. برای روشن شدن نحوه استفاده از trait ها به مثال زیر توجه کنید :

<?php
    trait PrintFunctionality
    {
        public function FirstPrint()
        {
            echo 'This is FristPrint !<br/>';
        }
    
        public function SecondPrint()
        {
            echo 'This is SecondPrint !<br/>';
        }    
    }

    class firstClass
    {
        use PrintFunctionality;
    }

    class secondClass
    {
        use PrintFunctionality;
    }

    $firstClass  = new firstClass();
    $secondClass = new secondClass();

    $firstClass -> FirstPrint();
    echo '<br/>';
    $secondClass -> FirstPrint();        
    $secondClass -> SecondPrint();        
?>
This is FristPrint !

This is FristPrint !
This is SecondPrint !

در کد بالا یک trait تعریف کرده‌ایم (خطوط 13-2). در داخل این trait دو متد با نام‌های ()FirstPrint و ()SecondPrint قرار داده‌ایم. حال می‌خواهیم از این متدها در داخل دو کلاس firstClass و secondClass استفاده کنیم. برای اینکار همانطور که مشاهده می‌کنید از کلمه کلیدی use و سپس نام trait در داخل کلاس بهره می‌بریم. سپس با ایجاد شیء از دو کلاس می‌توانیم از هر متدی که دوست داشتیم استفاده کنیم.