メサイア・ワークス

laravel5.1によく出てくるTraitとは、そもそも何なのか?

laravel5.1によく出てくるTraitとは、そもそも何なのか?

Q1, PHPのトレイトという機能は、どういうものなの?
A1, クラスとは独立して、メソッド(クラス関数)やプロパティ(クラス変数)を単独で定義できる。
使いたいクラスで、使いたいメソッドだけuseすればいい(逆にuseされずに、トレイト単体では実行できない。dllファイルに近い?)
クラスの継承に近い感じ(PHPでは多重継承できないので、複数のtraitを使って実現する)
http://qiita.com/sasakure-kei@github/items/212637b2f32197441a3a

Q2, 具体的には、どうやって使うの?
A2, 簡単なサンプルは以下の通り

Q3, traitは複数useできるけど、全く同じメソッド名があったら、どうなるの?
A3, バッティング(どちらを適用していいのか分からない)して、単純にエラーになる。
Fatal error: Trait method say has not been applied, because there are collisions with other trait methods on OyaClass

Q4, なんとかならないの、これ?
A4, 子クラスがuseしたトレイトのメソッドを優先(上書き)して実行してくれる。

Q5, なるほど、変更したいメソッドがあったら、元のtraitをコピペして、自作traitを作って上書きすればいいのか!
A5, 正解! そして自作traitファイルを生成しなくても、使うクラス内で再定義(上書き)できる

モバイルバージョンを終了