提供要在供应商中扩展的不同抽象类

时间:2019-07-15 20:39:27

标签: php laravel extend

我正在使用的供应商包中有一个扩展到整个包的抽象类,我试图向该抽象类添加一个特征,以便扩展该抽象类的每个类都使用它。

长什么样

abstract class AbstractClass {
}

class A extends AbstractClass {
}

正确的方法是什么?

1 个答案:

答案 0 :(得分:0)

您不能通过修改其源代码直接扩展供应商类(实际上,您可以,但这是非常的错误做法)。根据具体情况,您可以通过3种方式实现相似的目标:

1 -经典继承,其中某些方法被覆盖。不要忘记合同,这些合同允许您通过实现这些合同并自定义依赖项注入来用您的Laravel类替换某些Laravel类。

2 -在 1 效率低下时使用特征。例如,Laravel分页器Illuminate\Pagination\PaginatorIlluminate\Pagination\LengthAwarePaginator。如果要使用相同的功能扩展它们,则 1 要求2个相同的实现,而 2 仅需要1个实现。

3 -扩展而不实现自定义类的唯一方法是使用macro中的mixin / Illuminate\Support\Traits\Macroable方法。但是,只有在基类使用此特征的情况下才有可能。