今年の書き初めはPHPでした
PHP5.4から利用できるTrait(Scalaでも同名)とInterfaceを利用した場合、 お作法としてTraitとInterfaceはセットで定義しておく。
理由としては、Traitは型宣言に利用できない(タイプヒント出来ない)為、 メソッドが特定の型を要求する場合は、タイプヒントする為にInterfaceを定義しておく必要がある。 (独習PHP10.5.4より参照で、この文の意味が理解不足)
・型を継承するインターフェース
・実装を継承するトレイト
この違いは理解したと思うが、メソッドが特定の型を要求する場合の為にInterfaceを定義しておくという 説明についてはコードレベルで理解出来ていない。
<?php // 型を定義 interface IFax { function send(); } interface IPrinter { function printer(); } // 実装を定義 trait FaxTrait { public function send() { print 'sending Fax...sended!'; } } trait PrinterTrait { public function printer() { print 'printing ... complete!'; } } class FaxPrinter implements IFax, IPrinter { use FaxTrait, PrinterTrait; } $fp = new FaxPrinter(); $fp->send(); $fp->printer();