我有一个类,它扩展了另一个类并使用了一个特征。
class A extends ABase
{
use MyTrait;
//...
}
扩展类(ABase
)扩展了另一个类(ABase2
),它扩展了一个抽象类(ABase3
)。
当创建一个A
类时,会执行trait构造函数,因为在A
中没有定义构造函数。同时,trait构造函数调用一个方法(configureOptions
),该方法在trait中定义,但也在抽象类ABase3
中定义,具有相同的可见性(protected)。
trait MyTrait
{
public function __construct($options)
{
//...
$this->configureOptions($resolver);
//...
}
protected function configureOptions($resolver)
{
// Define options
}
}
我不明白的是,当从trait调用configureOptions
时,执行的方法不是trait中定义的方法,而是抽象类(ABase3
)中定义的方法。
正如PHP文档所说:基类继承的成员被Trait插入的成员覆盖。优先顺序是当前类的成员重写Trait方法,Trait方法反过来重写继承的方法。
没有提到从同一特性调用方法,但是不应该首先检查它自己的类中的方法?
编辑:
不仅抽象类(ABase3
)有configureOptions
方法,还有A类,而且从trait调用的方法应该调用自己的类方法。不是吗?
我从这个答案中得到了答案。
class A extends ABase
{
use MyTrait {
configureOptions as traitConfigureOptions;
}
//...
}
然后,而不是父::configreOptions($解析器)
:
$this->traitConfigureOptions($resolver);
我有一种叫做睡眠的特质: 我可以为每个结构提供不同的睡眠实现,但事实证明,大多数人的睡眠方式很少。你可以睡在床上: 如果你在露营,你可以睡在帐篷里: 有一些奇怪的情况。我有一个朋友可以靠墙睡觉,但大多数人,大多数时候,都会陷入一些简单的情况。 我们定义一些结构,让它们Hibernate: 呃-哦!编译错误: 这个编译器错误很奇怪,因为如果一个trait实现另一个trait时出现了问题,我希望在我这
问题内容: 我想做以下事情: 创建一个自己的Eclipse插件,(例如)只有一个方法“ sayHello”显示消息“ hello world”。 所以太好了。 但是现在我想让安装了我的插件的用户从其Java代码中调用此方法。像这样的东西: 有谁知道如何做到这一点?我认为这有点复杂… 问题答案: 基本上,您希望从Eclipse 编译并 运行的 代码中调用一个 正在运行的 插件。因为这是两个单独的过程
这是我的控制器: 这是我访问http://localhost:8080/area/1时得到的: 无法转换“java”类型的值。lang.String'转换为必需的类型'int';嵌套的例外是java。lang.NumberFormatException:对于输入字符串:“asd3333”] 我测试了这个随机返回,只是为了显示发生了什么...该方法首先用请求中的@PathVariable=1调用,然
问题内容: 我刚刚遇到了一个使用in 方法的代码。使用它而不是编写(或从eclipse生成)我们自己的逻辑有什么优势?一个简单的例子会更有益。 编辑:如果没有比在类中减少代码少的任何好处,是否没有反射的开销? 问题答案: 有几种方法可以解决此问题。 您可以自己动手-出现细微错误的可能性最高。 您可以让Eclipse为您生成equals和hashCode方法-保留大量代码,这些代码可能会受到无意编辑
我正在处理的作曲家包有问题。它实现了一个特性计费。 我试图在我的类中重写此方法 但是该方法没有被重写。作为测试,我覆盖了一些公共功能,它们运行良好,这是特征的限制吗?我试图在网上找到答案,但没有找到。 我试图重写这个函数,因为我需要自定义BraintreeSubcript类的行为。 任何帮助都将不胜感激。
本文向大家介绍PHP Laravel中的Trait使用方法,包括了PHP Laravel中的Trait使用方法的使用技巧和注意事项,需要的朋友参考一下 Trait是一种在单继承语言(如PHP)中重用代码的机制。Trait旨在通过使开发人员能够在生活在不同类层次结构中的多个独立类中自由地重用方法集来减少单继承的某些限制。Traits和类组合的语义以降低复杂性的方式定义,并避免了与多重继承和Mixin