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

Kus*_*gra 8 php traits

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

Sam*_*dra 14

说明

根据Traits文档,当您在多个特征中使用相同的方法时,您可以通过使用insteadof运算符明确指导程序使用特定特征的方法.请参考下面的示例,它是从上面的链接借来的,这里,当$t->smallTalk()调用它时,它调用的是smallTalk方法,trait Btrait A这正好是在这里使用的.由于Class Talker使用特征A,B并且两个特征都有smallTalk()方法,我们明确告诉它使用特征B's 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();
Run Code Online (Sandbox Code Playgroud)

产量

BA

我希望这可以解决你的困惑.