wog*_*and 9 php inheritance multiple-inheritance
我有两个PHP特征,每个特征都继承自相同的第三特征:
trait C {
public function smallTalk() {
echo 'c';
}
}
trait A {
use C;
public function ac() {
echo 'a'.smallTalk();
}
}
trait B {
use C;
public function bc() {
echo 'b'.smallTalk();
}
}
Run Code Online (Sandbox Code Playgroud)
我想在课堂上使用它们:
class D {
use A, B;
public function acbc() {
echo ac().bc();
}
}
Run Code Online (Sandbox Code Playgroud)
但我一直在收到错误
致命错误:特征方法smallTalk尚未应用,因为与D上的其他特征方法存在冲突
我知道use_once这不是一件事,但我正在寻找相同的功能require_once或include_once提供,但对于特征.这个例子很简单.我的真实C有很多方法,并且被超过2个特征所继承,所以我真的不想在insteadof每次使用超过1个这些特征时重复长字符串.
您需要阅读:冲突解决
如果两个 Traits 插入一个同名的方法,并且没有显式解决冲突,则会产生致命错误。
要解决同一类中使用的 Traits 之间的命名冲突, 需要使用替代运算符来准确选择冲突的方法之一。
由于这只允许排除方法,因此可以使用as运算符允许以另一名称包含冲突方法之一。
例子:
<?php
trait A {
public function smallTalk() {
echo 'a';
}
public function bigTalk() {
echo 'A';
}
}
trait B {
public function smallTalk() {
echo 'b';
}
public function bigTalk() {
echo 'B';
}
}
class Talker {
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
}
}
class Aliased_Talker {
use A, B {
B::smallTalk insteadof A;
A::bigTalk insteadof B;
B::bigTalk as talk;
}
}
Run Code Online (Sandbox Code Playgroud)