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