🤖

phpmdでエラーになったTraitの使用例

2021/12/29に公開

以下のような実装をした時に

  • php的にはエラーにはならず、期待する動作をした
  • でも、phpmd(1.4.0)でエラーになった

という事が起きて、Jenkinsさんに怒られた…。

<?php

trait TraitA
{
    function executeTraitA()
    {
        echo __METHOD__, PHP_EOL;
        $this->show();
    }

    abstract function show();
}

trait TraitB
{
    function executeTraitB()
    {
        echo __METHOD__, PHP_EOL;
        $this->show();
    }

    abstract function show();
}

class Test
{
    use TraitA;
    use TraitB;

    function show()
    {
        echo __METHOD__, PHP_EOL;
    }
}

$obj = new Test;
$obj->executeTraitA();
$obj->executeTraitB();
there are collisions with other trait methods on ... 

という感じでエラーを吐く。

abstractで手を抜くのではなくinterface使ったりしなさいという事か…?

Discussion