我有一个使用两个特征CavityTools
和OperationTools
class OperationController extends Controller
{
use \App\Traits\CavityTools;
use \App\Traits\OperationTools;
然而,第二个特征OperationTools using
CavityTools`:
trait OperationTools {
use \App\Traits\CavityTools;
因此,当我尝试使用OperationTools
等任何控制器方法中的$this->getProduction()
方法时,我得到一个错误,告诉我CavityTools
中的方法它不会因碰撞而被应用:
特征方法cavityPerformanceBetweenTimes尚未应用, 因为与其他特质方法存在碰撞 应用\ HTTP \控制器\ OperationController
我试图为第二个特征use \App\Traits\OperationTools as OpTs;
添加别名,但它会生成解析错误:
解析错误:语法错误,意外' as' (T_AS),期待','要么 &#39 ;;'或' {'
我该如何解决这个问题?
答案 0 :(得分:1)
这是因为两个特征都有相同的功能。为避免这种情况,您必须在当前班级中使用“ReplaceOf”。
答案 1 :(得分:1)
仅使用OperationTools
特征,因为CavityTools
已被使用。
示例代码:
<?php
trait A {
function a() {
echo "a trait\n";
}
}
trait B {
use A;
function b() {
echo "b trait\n";
}
function a() {
echo "a fcn from trait B\n";
}
}
trait C {
use B;
function a() {
echo "a fcn from C trait\n";
}
function b() {
echo "b fcn from C trait\n";
}
}
class AClass {
use A;
}
$classA = new AClass;
$classA->a();
// $classB->b(); // will throw up
class BClass {
use B;
}
$classB = new BClass;
$classB->a();
$classB->b();
class CClass {
use C;
}
$classC = new CClass;
$classC->a();
$classC->b();
//输出
a trait
a fcn from trait B
b trait
a fcn from C trait
b fcn from C trait