Trait method %s::%s has not been applied as %s::%s

Description

Two methods with the same name were imported with two distinct traits: PHP could not decide which one to use.

Example

<?php

trait T {
    public function foo() { return 3; }
}
trait U {
    public function foo() { return 2; }
}

class Bar {
    use T, U;
}

$x = new Bar();
var_dump($x->foo());

?>

Literal Examples

  • Trait method U::foo has not been applied as Bar::foo, because of collision with T::foo

Solutions

  • Change the name of the method in one of the trait.

  • Add aliasing when importing the traits.

  • Only use one of the trait.

  • Make one trait use the other one.