第10章 オブジェクト指向構文 / 第3回 模擬試験
PHPのトレイトの名前競合に関する次の記述のうち、正しいものはどれか。
複数のトレイトに同名のメソッドがあり競合する場合、`insteadof`で優先するトレイトを指定できる。
正解
トレイトの名前が競合した場合、PHPは自動的に先に定義したトレイトを常に優先する。
トレイトの名前競合は、PHPでは検出されずに実行時エラーになる。
トレイトは名前の競合が起こらないよう、1クラスにつき1つしか使用できない。
解説
複数のトレイトで同名メンバーが競合する場合、`use TraitA, TraitB { TraitA::method insteadof TraitB; }`のように明示的に優先するトレイトを指定して解決します。(参照: 独習PHP 第4版 第10章 オブジェクト指向構文 10.5.4節 名前競合時の挙動 p.529〜531)