Trait中的替代关键字如何工作

时间:2016-10-02 19:23:22

标签: php traits

我只是阅读有关特征以及如何在逗号分隔的相同php代码中使用多个php特征。但是,我不理解在两个特征具有相同功能的情况下用于解决冲突的replaceof关键字的概念。任何人都可以解释如何使用它来告诉引擎我愿意使用特征A的函数hello()而不是特征B的函数,因为有两个特征A和B以及函数hello( )在这两个特征中。

1 个答案:

答案 0 :(得分:11)

说明

根据Traits Documentation,当您在多个特征中使用相同的方法时,您可以通过使用insteadof运算符明确指导程序使用特定特征的方法。请参考以下从上面链接借用的示例,这里,当调用$t->smallTalk()时,它调用trait B中的smallTalk方法而不是trait A,这恰好是已经使用的#of运算符这里。由于Class Talker使用特征A,B和两个特征都有smallTalk()方法,我们明确告诉它使用特征B的smallTalk

实施例

<?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;
    }
}

$t = new Talker;
$t->smallTalk();
$t->bigTalk();

输出

BA

我希望这可以解除你的困惑。