開発ブログ

株式会社Nextatのスタッフがお送りする技術コラムメインのブログ。

電話でのお問合わせ 075-744-6842 ([月]-[金] 10:00〜17:00)

  1. top >
  2. 開発ブログ >
  3. PHP >
  4. [PhpStorm] Traitと@mixinの組み合わせでエラーが出てしまう
[PhpStorm] Traitと@mixinの組み合わせでエラーが出てしまう

[PhpStorm] Traitと@mixinの組み合わせでエラーが出てしまう

こんにちは、ナカエです。

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で実行した場合にはエラーは出ません。

スクリーンショット 2018-10-15 15.23.11.png

なお、FugaHogeTraitをFugaTraitにリネームしたところエラーが解消されました。解析の順番に依るバグなのでしょうか?謎は深まります。

@mixinの使い所には気をつけたほうが良さそうですね。

  • posted by Nextatスタッフ
  • PHP
TOPに戻る