9cubed
ブログ | Tailwind | Vite | Python | MariaDB | Node.js | Linux | PowerShell | Docker | Git | その他 | 将棋ウォーズ | 歌の練習
< 前の記事

PHP - 例外処理

次の記事 >

PHP - Webページの作成

PHP

PHP - trait

公開日:2020-12-22
更新日:2020-12-22

1. 概要

trait を使うと、クラスを継承せずに、他のクラスとメソッドを共有できます。
メソッドをクラス外のトレイトで定義して、それをクラスに取り込むイメージです。
トレイトは、クラスのようにメソッドを定義して、使う時は、クラス内で use で指定します。
トレイトでは、クラスを static、インスタンスを $this で参照できます。
トレイトの時点では存在しないクラスのメソッドやプロパティを使用することもできます。
trait トレイト名 {
    function メソッド名1() { }
    function メソッド名2() { }
}
class クラス名1 {
    use トレイト名;
}
class クラス名2 {
    use トレイト名;
}

2. 使用例

Test1クラスとTest2クラスで、Utilsトレイトのメソッドを呼び出しています。
trait Utils {
    public function getClassName() {
        return get_class($this); // $this でクラスのインスタンスを参照可能
    }
    public function getMsg() {
        return $this->msg; // trait にないプロパティやメソッドも参照可能
                           // 実行時にプロパティがない場合はエラー
    }
    public static function getInstance() {
        return new static(); // インスタンスの生成
                             // trait 内ではクラス名が特定できないため、static を使用する
    }
}
class Test1 {
    use Utils;
    private $msg = 'おはよう';
}
class Test2 {
    use Utils;
    private $msg = 'こんにちは';
}

$obj1 = new Test1();
var_dump($obj1->getClassName());
var_dump($obj1->getMsg());

$obj2 = Test2::getInstance(); // new Test2();
var_dump($obj2->getClassName());
var_dump($obj2->getMsg());
実行結果
string(5) "Test1"
string(12) "おはよう"
string(5) "Test2"
string(15) "こんにちは"

3. 使用例

トレイトは、複数使用することができます。
トレイトのメソッドが重複した場合は、insteadof を使って、どちらか片方のメソッドを有効にします。
trait Trait1 {
    public function getMsg() {
        return 'Trait1';
    }
}
trait Trait2 {
    public function getMsg() {
        return 'Trait2';
    }
    public function hello() {
        return 'hello';
    }
}

class Test1 {
    use Trait1, Trait2 {
        Trait1::getMsg insteadof Trait2; // Trait1::getMsg を有効にする
    }
}

$obj1 = new Test1();
var_dump($obj1->getMsg());
var_dump($obj1->hello());
実行結果
string(6) "Trait1"
string(5) "hello"

< 前の記事

PHP - 例外処理

次の記事 >

PHP - Webページの作成

YouTube X

新着一覧

  • テーブル結合(CROSS JOIN、INNER JOIN、LEFT JOIN)MariaDB
  • 楽観ロック・悲観ロックMariaDB
  • カレントリードMariaDB
  • インデックスMariaDB
  • 論理削除(ソフトデリート)MariaDB
  • awk(オーク)の使い方についてLinux
  • NOT NULL 制約と NULL を許容した時の動作MariaDB
  • 外部キー制約MariaDB
  • MySQL と MariaDB の関係MariaDB
  • Docker で PostgreSQL のコンテナの使用Linux

アーカイブ

  • 2026/01
  • 2025/12
  • 2025/11
  • 2025/10
  • 2025/09
  • 2025/08
  • /00

以前のカテゴリー一覧

  • CakePHP3
  • CentOS7
  • HTML・CSS・JavaScript
  • Haskell
  • JavaScript
  • Kotlin
  • Laravel5
  • PHP
  • Python
  • Ruby
  • RubyOnRails5
  • TypeScript
  • Vue.js
  • Webサーバ講座
  • Webプログラミング講座
  • jQuery
  • linux
  • パソコン講座
  • ブログ
  • プログラミング講座
  • メモ帳作成講座
  • 数学

Copyright © 9cubed. All Rights Reserved.

プライバシーポリシー 利用規約
▲