その他

【初学者向け】LaravelのTraitとは?初学者向けにわかりやすく解説【PHP・Laravel】

この記事は約5分で読めます。

Traitとは

PHPのTraitは、クラスにメソッドを追加できる仕組みです。通常、PHPではクラスの継承は1つしかできません(単一継承)。しかし、Traitを使うことで、異なるクラスに共通の機能を簡単に再利用できるようになります。

LaravelでのTraitの活用


Laravelでは、Traitを利用することでコードの再利用性を高め、より効率的な開発が可能になります。例えば、モデルやコントローラーで共通の処理をまとめる際によく使用されます。

Traitの基本的な書き方

まずは、簡単なTraitの定義を記載してみます。

<?php

namespace App\Traits;

trait Loggable
{
    public function log($message)
    {
        echo "[LOG]: " . $message . "\n";
    }
}

上記、Loggable Traitにはlogメソッドがあり、引数のメッセージをログとして出力する機能を持っています。

Traitの使い方

Traitを使用するには、下記のようにuseキーワードを使ってクラスに組み込みます。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use App\Traits\Loggable;

class Post extends Model
{
    use Loggable;
}

この Post クラスは Loggable Trait を使っているため、log メソッドを利用できます。

$post = new Post();
$post->log(“記事が作成されました!”);


Traitでプロパティを定義する

Trait内でプロパティを定義することもできます。

<?php

namespace App\Traits;

trait HasStatus
{
    public $status = 'draft';

    public function setStatus($status)
    {
        $this->status = $status;
    }
}

このTraitを利用すれば、クラスに status プロパティを簡単に追加できます。

class Article
{
    use HasStatus;
}

$article = new Article();
echo $article->status; // draft
$article->setStatus('published');
echo $article->status; // published

Traitのメソッドを上書きする

Traitで定義したメソッドは、クラス内で上書きすることができます。

trait Greetable
{
    public function greet()
    {
        return "こんにちは!";
    }
}

class User
{
    use Greetable;

    public function greet()
    {
        return "Hello!";
    }
}

$user = new User();
echo $user->greet(); // Hello!

クラス内で同じメソッドを定義すると、Traitのメソッドよりも優先されます。

Traitの活用例(Laravelのモデル)

実際にLaravelのモデルでTraitを活用する例を紹介します。

例えば、すべてのモデルに uuid を自動生成する機能を追加したい場合、以下のようにTraitを作成できます。

<?php

namespace App\Traits;

use Illuminate\Support\Str;

trait HasUuid
{
    protected static function bootHasUuid()
    {
        static::creating(function ($model) {
            $model->uuid = Str::uuid();
        });
    }
}

このTraitを User モデルに適用すると、uuid が自動で生成されます。

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use App\Traits\HasUuid;

class User extends Model
{
    use HasUuid;

    protected $fillable = ['name', 'email', 'password', 'uuid'];
}

まとめ

  • Traitはクラスに共通の機能を追加できる便利な仕組み。
  • Laravelでは、モデルやコントローラーの共通処理をまとめる際によく使用される。
  • use キーワードでクラスに組み込むだけで簡単に活用できる。
  • Trait内でプロパティを定義したり、メソッドを上書きしたりも可能。

Laravel開発でTraitを活用すると、コードの重複を減らし、メンテナンスしやすい設計ができます。ぜひ試してみてください!

参考サイト

PHP: トレイト - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.