🤖
Trait method display has not been applied
PHP Fatal error: Trait method display has not been applied, because there are collisions with other trait methods on XXXX
というエラーが出た。
こんな感じのコードで怒られた。
<?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
で回避できるらしいが…。
Discussion