Trait (トレイト)
-
トレイトの目的 : PHP では、複数のクラスで同じメソッドを共有するためにトレイトが使用されます。
これは、PHP が単一継承しかサポートしていないためめ、複数のクラスで同じメソッドを再利用するための解決策でもあります。 -
トレイトの制限 : トレイトはインスタンス化できません。つまり、トレイト自体はオブジェクトを作成することはできません。
また、トレイトはクラスのように継承することもできません。 -
トレイトの優先順位 : クラス内で同じ名前のメソッドが存在する場合、クラスのメソッドが優先されます。これは、クラスがトレイトから継承したメソッドを上書き(override)することができるためです。
-
トレイトの衝突 : 2つのトレイトが同じ名前のメソッドを持っていて、それらのトレイトが同じクラスで使用される場合、PHPはエラーをスローします。
これを解決するためには、insteadof
キーワードを使用して、どのトレイトのメソッドを使用するかを明示的に指定する必要があります。 -
トレイトを持ってくるには
use
キーワードを使う。
● Trait (トレイト) 実装例
sample.php
<?php
trait ProductTrait
{
public function getProduct()
{
echo 'プロダクト';
}
}
trait NewsTrait
{
public function getNews()
{
echo 'ニュース';
}
}
class Product
{
use ProductTrait;
use NewsTrait;
public function getInformation()
{
echo 'クラスです';
}
// overrideも可能
public function getNews()
{
echo 'クラスのニュースです';
}
}
$product = new Product(); // インスタンス化
$product->getInformation();
echo '<br>';
$product->getProduct();
echo '<br>';
$product->getNews();
echo '<br>';