Trait 中的 insteadof 关键字如何工作
How does insteadof keyword in a Trait work
我刚刚阅读了有关 traits 的内容,以及如何在同一个 php 代码中使用多个 php traits,并用逗号分隔。但是,我不理解用于在两个特征具有相同功能的情况下解决冲突的 insteadof 关键字的概念。任何人都可以解释 insteadof 关键字是如何工作的以及如何使用它来告诉引擎我愿意使用特征 A 的函数 hello() 而不是特征 B 的函数,因为有两个特征 A 和 B 以及一个函数 hello( ) 在两个特征中。
说明
根据Traits Documentation,当你在多个trait中有相同的方法时,那么你可以通过使用insteadof
运算符明确地引导程序使用特定trait的方法。参考下面的例子,它是从上面link借来的,这里,当$t->smallTalk()
被调用时,它调用trait B
中的smallTalk方法而不是trait A
,这正是insteof运算符已用于此处。由于 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
我希望这已经消除了您的困惑。
我刚刚阅读了有关 traits 的内容,以及如何在同一个 php 代码中使用多个 php traits,并用逗号分隔。但是,我不理解用于在两个特征具有相同功能的情况下解决冲突的 insteadof 关键字的概念。任何人都可以解释 insteadof 关键字是如何工作的以及如何使用它来告诉引擎我愿意使用特征 A 的函数 hello() 而不是特征 B 的函数,因为有两个特征 A 和 B 以及一个函数 hello( ) 在两个特征中。
说明
根据Traits Documentation,当你在多个trait中有相同的方法时,那么你可以通过使用insteadof
运算符明确地引导程序使用特定trait的方法。参考下面的例子,它是从上面link借来的,这里,当$t->smallTalk()
被调用时,它调用trait B
中的smallTalk方法而不是trait A
,这正是insteof运算符已用于此处。由于 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
我希望这已经消除了您的困惑。