https://3v4l.org/mFuQE
1. no deprecate if same-class-named method get from trait
2. replace same-named method ba to aa in C
trait ATrait {
public function a(){
return 'Aa';
}
}
trait BTrait {
public function a(){
return 'Ba';
}
}
class C {
use ATrait{
a as aa;
}
use BTrait{
a as ba;
}
public function a() {
return static::aa() . static::ba();
}
}
$o = new C;
echo $o->a(), "\n";
class D {
use ATrait{
ATrait::a as aa;
}
use BTrait{
BTrait::a as ba;
}
public function a() {
return static::aa() . static::ba();
}
}
$o = new D;
echo $o->a(), "\n";
class E {
use ATrait{
ATrait::a as aa;
ATrait::a insteadof BTrait;
}
use BTrait{
BTrait::a as ba;
}
public function e() {
return static::aa() . static::ba();
}
}
$o = new E;
echo $o->e(), "\n";
class F {
use ATrait{
a as aa;
}
use BTrait{
a as ba;
}
public function f() {
return static::aa() . static::ba();
}
}
$o = new F;
echo $o->f(), "\n";
AaAa
AaBa
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; E has a deprecated constructor in /in/mFuQE on line 48
AaBa
Fatal error: Trait method a has not been applied, because there are collisions with other trait methods on F in /in/mFuQE on line 65