场景:
trait A { function calc($v) { return $v+1; } } class MyClass { use A; function calc($v) { $v++; return A::calc($v); } } print (new MyClass())->calc(2); // should print 4
该代码不起作用,而且我找不到像继承那样来调用trait函数的方法。我打过电话self::calc($v),static::calc($v),parent::calc($v),A::calc($v)和以下内容:
self::calc($v)
static::calc($v)
parent::calc($v)
A::calc($v)
trait A { function calc($v) { return $v+1; } } class MyClass { use A { calc as traitcalc; } function calc($v) { $v++; return traitcalc($v); } }
没用。
有没有办法使它起作用,或者我必须完全重写特质函数,它比这要复杂得多:)
您的最后一个快到了:
trait A { function calc($v) { return $v+1; } } class MyClass { use A { calc as protected traitcalc; } function calc($v) { $v++; return $this->traitcalc($v); } }
特质不是阶级。您不能直接访问其成员。基本上只是自动复制和粘贴…