traitはクラス中に現れる共通のプロパティ、メソッドをまとめて記述するための仕組みです。コード中におけるその扱いは継承に似ています。継承を行った場合、スコープ定義演算子をもちいることによってコードをコピペせずにちょっとだけ処理を付け足すことが出来ます。
class ChildHoge extends ParentHoge
{
public function __construct()
{
//親のコードの処理前に付け足す処理の部分
parent::__construct();
//親のコードの処理後に付け足す処理の部分
}
}
このように便利なスコープ定義演算子ですが、traitを指すことはできません。traitでこれに似たことをしたい時、名前の変換を行うことによって実現ができます。元のコードを別名として扱い、traitを読み込んだクラスで元々の名前のメソッドを実装することによってクラス外のふるまいを変えることなくちょっと付け足しただけの差分プログラミングができます。
class ChildHoge
{
use FugaTrait {__construct as traitConstruct;}
public function __construct()
{
//トレイトのコードの処理前に付け足す処理の部分
$this->traitConstruct();
//トレイトのコードの処理後に付け足す処理の部分
}
}