icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

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

 

そもそもPHPについてよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、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を学んで未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

下記のコードでは本クラスとペンクラスを用意して、両クラスでは共通して価格の税込み計算を行う処理があるため、その処理を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を使ってWebアプリケーション開発を習得できるオンラインブートキャンプPHP/Laravel講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。