首页 > 解决方案 > 提供不同的抽象类在vendor中扩展

问题描述

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

它看起来像什么

abstract class AbstractClass {
}

class A extends AbstractClass {
}

这样做的正确方法是什么?

标签: phplaravelextend

解决方案


您不能通过修改其源代码来直接扩展供应商类(实际上,您可以,但这是一种非常糟糕的做法)。根据上下文,您有 3 种方法可以实现类似的目标:

1 - 一些方法被覆盖的经典继承。不要忘记契约,它允许你通过实现这些契约和自定义依赖注入来用你的类替换一些 Laravel 类。

2 - 当1无效时使用特征。例如 Laravel 分页器Illuminate\Pagination\PaginatorIlluminate\Pagination\LengthAwarePaginator. 如果您想用相同的功能扩展它们,1要求 2 个相同的实现,而2只需要 1 个实现。

3 - 在不实现自定义类的情况下进行扩展的唯一方法是使用macro/mixin方法 from Illuminate\Support\Traits\Macroable。但只有当基类使用这个特性时才有可能。


推荐阅读