[PhpStorm] Traitと@mixinの組み合わせでエラーが出てしまう
こんにちは、ナカエです。
PhpStorm(ver 2018.2.5)を利用して、メソッドチェーンを多用するライブラリを開発していました。
その途中で思いがけずPhpStormのエラーの指摘に遭遇したので再現方法をメモしておきます。
PhpStorm(ver 2018.2.5)を利用して、メソッドチェーンを多用するライブラリを開発していました。
その途中で思いがけずPhpStormのエラーの指摘に遭遇したので再現方法をメモしておきます。
コード
<?php
declare(strict_types=1);
interface FugaInterface {
public function doFuga(): void;
}
trait FugaHogeTrait {
public function doFuga(): void {}
}
/**
* @mixin FugaInterface
*/
trait HogeTrait {
public function doHoge() { $this->doFuga(); }
}
class Fuga implements FugaInterface {
use FugaHogeTrait;
use HogeTrait;
}
$fuga = new Fuga();
$fuga->doFuga();
実際のコードはもう少し複雑だったので、最小化したコードが上記です。ポイントはPHPDocコメントの@mixinとTraitの組み合わせでしょうか。FugaInterfaceをFugaTraitにて実装し、FugaInterfaceの利便性の強化するメソッドを追加するHogeTraitを実装しているというところです。HogeTraitはFugaInterfaceを実装したメソッドに使ってくれという意味合いで@mixinを書いています。PHPで実行した場合にはエラーは出ません。
なお、FugaHogeTraitをFugaTraitにリネームしたところエラーが解消されました。解析の順番に依るバグなのでしょうか?謎は深まります。
@mixinの使い所には気をつけたほうが良さそうですね。