小编典典

如何覆盖特质函数并从被覆盖的函数中调用它?

php

场景:

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)和以下内容:

trait A {
    function calc($v) {
        return $v+1;
    }
}

class MyClass {
    use A {
        calc as traitcalc;
    }

    function calc($v) {
        $v++;
        return traitcalc($v);
    }
}

没用。

有没有办法使它起作用,或者我必须完全重写特质函数,它比这要复杂得多:)


阅读 220

收藏
2020-05-29

共1个答案

小编典典

您的最后一个快到了:

trait A {
    function calc($v) {
        return $v+1;
    }
}

class MyClass {
    use A {
        calc as protected traitcalc;
    }

    function calc($v) {
        $v++;
        return $this->traitcalc($v);
    }
}

特质不是阶级。您不能直接访问其成员。基本上只是自动复制和粘贴…

2020-05-29