我有一个使用特征MyTrait的类MyClass。它们都具有方法getName()(MyClass从MyParentClass继承它)。
MyTrait :: getName()的父范围是什么?在MyTrait上下文中调用MyClass :: getName()和MyParentClass :: getName()的正确方法是什么?。
请参见下面的代码以供参考。
trait MyTrait {
public function getName() : string
{
return parent::getName() . '_special';
}
}
class MyParentClass {
public function getName(): string
{
return "MyName";
}
}
class MyClass extends MyParentClass {
use MyTrait;
}
[特质方法的行为就像它们是在类中使用trait一样声明的,]
trait MyTrait {
public function getName() : string
{
return parent::getName() . '_special';
}
}
class MyClass extends MyParentClass {
use MyTrait;
}
在功能上与]相同>
class MyClass extends MyParentClass { public function getName() : string { return parent::getName() . '_special'; } }
应该清楚,在这种情况下,
parent
是指MyParentClass
。如果有任何疑问,请使用以下代码:
<?php trait MyTrait { public function getName() : string { return parent::getName() . '_special'; } } class MyParentClass { public function getName(): string { return "MyName"; } } class MyClass extends MyParentClass { use MyTrait; } $instance = new MyClass(); echo $instance->getName();
产生以下输出:
MyName_special
可以使用特征方法中的
return parent::class;
(ref)进一步测试/演示,返回MyParentClass
。