نحوه استفاده از PHP Trait

۱۱ خرداد ۱۳۹۷

PHP Traits یک ابزار عالی برای استفاده از کدهای تکراری است. آنها به توسعه دهندگان اجازه می دهند تا روش هایی را که تکرار می شوند در کلاس های مختلف استفاده کنیم.

تعریف PHP Traits

Traits مثل کلاسها در PHP تعریف می شوند:


trait RobotSkillz
{
    public function speak(string $output)
    {
        echo $output;
    }
}

ما به جای یک کلاس، یک ویژگی را اعلام می کنیم.

یک مثال از PHP Trait

بیایید وانمود کنیم تعداد زیادی از کلاس های مربوط به ژانرهای مختلف فیلم ها داریم. هر کلاس دارای ویژگی های عمومی است که ما می خواهیم به عنوان یک آرایه یا JSON برگردانیم.


class HorrorFilm
{
    public $genre;
    public $length;
    public $rating;
    public $releaseDate;
    public $title;

    public function getGenre() : string
    {
        return $this->genre;
    }

    public function getLength() : int
    {
        return $this->length;
    }

    public function getRating() : string
    {
        return $this->rating;
    }
    public function getReleaseDate() : string
    {
        return $this->releaseDate;
    }

    public function getTitle() : string
    {
        return $this->title;
    }

    public function setGenre(string $genre)
    {
        $this->genre = $genre;
    }

    public function setLength(int $minutes)
    {
        $this->length = $minutes;
    }

    public function setRating(string $rating)
    {
        $this->rating = $rating;
    }

    public function setReleaseDate(string $date)
    {
        $this->releaseDate = $date;
    }

    public function setTitle(string $title)
    {
        $this->title = $title;
    }
}

حالا، یک ویژگی (trait) ایجاد می کنیم که روش هایی را که نیاز داریم اضافه می کنیم و می تواند در تمام کلاس های ما استفاده شود.


trait ArrayOrJson
{
    public function asArray() : array
    {
        return get_object_vars($this);
    }

    public function asJson() : string
    {
        return json_encode($this->asArray());
    }
}

Trait را در کلاسهای مورد نظر خود اضافه می کنیم:


class HorrorFilm
{
    use ArrayOrJson;

    ...

حالا هم کلاس و هم trait را با هم استفاده می کنیم:


$film = new HorrorFilm;
$film->setTitle('Kill All Humans!');
$film->setGenre('Slasher');
$film->setLength(124);
$film->setRating('R');
$film->setReleaseDate('November 2, 2019');

var_dump($film->asArray());
var_dump($film->asJson());

خروجی ما به شکل زیر خواهد بود:


array(5) { ["genre"]=> string(7) "Slasher" ["length"]=> int(124) ["rating"]=> string(1) "R" ["releaseDate"]=>

string(16) "November 2, 2019" ["title"]=> string(16) "Kill All Humans!" } string(105) "{"genre":"Slasher","length":124,"rating":"R","releaseDate":"November 2, 2019","title":"Kill All Humans!"}"

 نویسنده:حمید شاه محمدی
 تعداد مشاهده خبر:(508)
 هر روز از مقاله های جدید طراحی سایت در کانال تلگرام ما با خبر شوید

 میانگین امتیازات:
 
  تعداد رای دهندگان: {{ count }}
نظرات:

{{ x }}
{{ alert }}

نویسنده:{{ com.name }}
{{ com.body }}
{{ com.created_at }}