shinke1987.net
雑多な備忘録等のはず。
他のカテゴリ・タブ
目次
PR

PHPでのオブジェクト指向

2023-05-27 2023-05-27
カテゴリ: PHP

概要

トレイト

概要

再利用可能なコード(メソッド・プロパティ)をまとめて切り出しておくための仕組み。
型を継承するインターフェイスと、実装を継承するトレイトの違いを認識して、
トレイトを使う際にはインターフェイスと併せて使用するのが作法としては良いらしい。

traitの宣言

trait トレイト名 {
	クラスと同様にプロパティやメソッドを記載。
}

traitブロック配下の構文について

ほぼクラスと同じだが、次の制約がある。

traitの利用方法

クラスまたはトレイトの内部でuse文を利用する。
カンマ区切りで列挙することで、複数のトレイトをまとめて取り込むこともできる。

書式:use トレイト名;

名前が衝突した場合

次の優先順位となる。(トレイト同士で名前が衝突した場合はエラーとなる)

  1. 現在のクラスのメンバー
  2. トレイトのメンバー
  3. 親クラスのメンバー

次のように表記することで有効化するメンバを選択できる。
(これでMyTrait2の代わりにMyTrait1::hogeメソッドを利用しなさいという意味になる。)

class Myclass {
    use MyTrait1, MyTrait2 {
        MyTrait1::hoge insteadOf Mytrait2;
    }
}

次のようにメンバに別名を付与することで、名前が衝突する2つのメンバを利用できる。

class MyClass {
    use MyTrait1, MyTrait2 {
        MyTrait1::hoge insteadOf MyTrait2;    // as演算子を使う場合でも、insteadOf文を使わないと衝突が起こりエラーとなる。
        MyTrait2::hoge as foo;
    }
}

$cls = new MyClass();
$cls -> hoge();    // MyTrait1のhoge()が実行される。
$cls -> foo();     // MyTrait2のhoge()が実行される。  

名前空間

Tips

変数 instanceof 型名

変数に入っているインスタンスの型を確認する。

get_class($obj)関数

オブジェクトの元となるクラス名が返される。

get_parent_class($obj)

オブジェクトの元となるクラスの親クラス名が返される。

get_class_methods(クラス名)

指定したクラスのメソッドの一覧を返す。

get_class_vars(クラス名)

指定したクラスのプロパティの一覧を返す。

同一カテゴリの記事