我正在使用的供应商包中有一个扩展到整个包的抽象类,我试图向该抽象类添加一个特征,以便扩展该抽象类的每个类都使用它。
长什么样
abstract class AbstractClass {
}
和
class A extends AbstractClass {
}
正确的方法是什么?
答案 0 :(得分:0)
您不能通过修改其源代码直接扩展供应商类(实际上,您可以,但这是非常的错误做法)。根据具体情况,您可以通过3种方式实现相似的目标:
1 -经典继承,其中某些方法被覆盖。不要忘记合同,这些合同允许您通过实现这些合同并自定义依赖项注入来用您的Laravel类替换某些Laravel类。
2 -在 1 效率低下时使用特征。例如,Laravel分页器Illuminate\Pagination\Paginator
和Illuminate\Pagination\LengthAwarePaginator
。如果要使用相同的功能扩展它们,则 1 要求2个相同的实现,而 2 仅需要1个实现。
3 -扩展而不实现自定义类的唯一方法是使用macro
中的mixin
/ Illuminate\Support\Traits\Macroable
方法。但是,只有在基类使用此特征的情况下才有可能。