🤖
phpmdでエラーになったTraitの使用例
以下のような実装をした時に
- 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