PHPでtrait(トレイト)を使う方法【初心者向け】

初心者向けにPHPでtrait(トレイト)を使う方法について解説しています。traitは、PHPの5.4.0のバージョンから導入されたコードを再利用できる機能です。実際にソースコードを書きながらtraitの使い方を説明しているので、ぜひ理解しておきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

PHPでtrait(トレイト)を使う方法について解説します。

コードを再利用するためにある機能で継承することなく利用できるので、使い方を知っておくと便利でしょう。

 

なお本記事は、TechAcademyのPHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPでtraitを使う方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

traitとは

PHPのバージョン5.4.0から導入されたコードの再利用性を高めるための機能になります。
古いバージョンのPHPを利用されている現場では、利用できないのでご利用の際はPHPのバージョンにはご注意ください。

さて、実際にtraitを使うには、まず、traitはclass定義の際にクラス名を決めるのと同じようにトレイト名を指定します。

定義したtraitブロック内ではメソッドを定義できます。

traitを作成に必要な作業は以上の「トレイト名を決める」「必要なメソッドを定義する」これだけです。

 

定義したtraitは、任意のクラス定義内で「use トレイト名」を記述するだけで、指定したトレイト名に定義されているメソッドをそのクラスが定義しているのと同じように利用できます。

このようにtraitは任意のクラスの機能(メソッド)を拡張できる仕組みになります。そのため、traitに定義するメソッドは複数のクラスで利用されることを想定して、できるだけ汎用性が高い処理を定義するべきです。

また、複数のクラスで同様の処理を行うメソッドがある場合は、そのメソッドをtraitに移して各クラスではそのtraitをuseするといったリファクタリングを行うべきです。

 

traitの書き方

traitの定義

trait トレイト名 {
    function メソッド名①() {
        処理
    }

    function メソッド名②() {
        処理
    }
}

traitの利用

class クラス名 {
    // これでこのクラスはメソッド①とメソッド②が定義されている状態と同じになります。
    use トレイト名;
}

 

[PR] PHPのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

下記のコードでは本クラスとペンクラスを用意して、両クラスでは共通して価格の税込み計算を行う処理があるため、その処理をtraitで定義しました。

「use TaxCalculator;」と記述するだけで、税込み計算機能が使えるようになっていることが分かるかと思います。

これを本クラス・ペンクラスで定義するとコードを書く量が増え、修正が発生した場合に両クラスに対して修正を行う必要があります。

traitを使うことでコード量を抑えて、修正が発生した場合でもTaxCalculatorだけを修正すればよいので保守性が高いですね。

// 消費税計算処理trait
trait TaxCalculator {

    private $price;         // 価格
    private $tax = 0.08;    // 消費税

    // 税込み価格を返します
    public function taxIncluded() {
        return $this->price * (1 + $this->tax);
    }

}

// 1冊の本の情報を表すクラス
class Book {
    use TaxCalculator;

    public $title;      // タイトル
    public $author;     // 著者

    public function __construct($price, $title, $author) {
        $this->price = $price;
        $this->title = $title;
        $this->author = $author;
    }
}

// 1本のペンの情報を表すクラス
class Pen {
    use TaxCalculator;

    public $color;  // 色
    public $type;   // シャーペンかボールペン

    public function __construct($price, $color, $type) {
        $this->price = $price;
        $this->color = $color;
        $this->type = $type;
    }
}

// 本とペンをインスタンス化します
$book = new Book(300, ""銀河鉄道の夜"", ""宮沢賢治"");
$pen = new Pen(100, ""black"", ""sharp"");

// これらの税込み価格を出力してみます
echo $book->taxIncluded().PHP_EOL;  // 324
echo $pen->taxIncluded().PHP_EOL;   // 108
この記事を監修してくれた方

青木 敦史(あおきあつし)
昼間は自社のWebサービスを運営している会社でフロントエンド/バックエンドを担当しているエンジニア。

Webエンジニアの経験は5年ほどです。TechAcademyではPHP/Laravelコースを担当しています。
開発実績: メイクレッスン支援アプリ / 電力自由化パッケージ / 携帯電話料金計算 / ライブチャットサービス

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

オンラインのプログラミングスクールTechAcademyではオンラインブートキャンプPHP/Laravelコースを提供しています。

PHPやフレームワークのLaravelを使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。