LoginSignup
1
0

More than 5 years have passed since last update.

PHP Fatal error: Trait method display has not been applied, because there are collisions with other trait methods on XXXX

Posted at

こんな感じのコードで怒られた。

<?php
trait BaseModule
{
    function display()
    {
        echo "BaseModule::display\n";
    }
}

trait ModuleA
{
    use BaseModule;
}

trait ModuleB
{
    use BaseModule;
}

class Test
{
    use ModuleA;
    use ModuleB;
}

(new BaseModule)->display();

Rubyとかだとどうなってるんだろうと思って試してみた。

module BaseModule
  def dispay
    puts "BaseModule::display"
  end
end

module ModuleA
  include BaseModule
end

module ModuleB
  include BaseModule
end

class Test
  include ModuleA
  include ModuleB
end

Test.new.display

Rubyは期待通りに

BaseModule::display

って表示される。

うーん。insteadofで回避できるらしいが…。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0