php - 提供不同的抽象类在vendor中扩展
问题描述
我正在使用的供应商包有一个在整个包中扩展的抽象类,我正在尝试向抽象类添加一个特征,以便每个扩展抽象类的类都使用它。
它看起来像什么
abstract class AbstractClass {
}
和
class A extends AbstractClass {
}
这样做的正确方法是什么?
解决方案
您不能通过修改其源代码来直接扩展供应商类(实际上,您可以,但这是一种非常糟糕的做法)。根据上下文,您有 3 种方法可以实现类似的目标:
1 - 一些方法被覆盖的经典继承。不要忘记契约,它允许你通过实现这些契约和自定义依赖注入来用你的类替换一些 Laravel 类。
2 - 当1无效时使用特征。例如 Laravel 分页器Illuminate\Pagination\Paginator
和Illuminate\Pagination\LengthAwarePaginator
. 如果您想用相同的功能扩展它们,1要求 2 个相同的实现,而2只需要 1 个实现。
3 - 在不实现自定义类的情况下进行扩展的唯一方法是使用macro
/mixin
方法 from Illuminate\Support\Traits\Macroable
。但只有当基类使用这个特性时才有可能。
推荐阅读
- stimulusjs - 在页面的其他地方重复使用刺激动作?
- sql - 如何获取带有特定事件的 SQL AdmitDate 和 DischargeDate?
- java - Mesibo 第一个应用程序处于 Fragment 连接错误状态
- batch-file - 使用 forfiles 的多个命令?
- c# - “Stripe.StripeConfiguration”的初始化程序引发异常
- angular - 如何更改 Angular 11 中的页面主题颜色?
- python - 列表中字典中的 For 问题 [Python]
- javascript - 在 AWS Lambda 函数中获取插槽的问题
- python-3.x - AttributeError:模块“skimage.restoration”没有属性“rolling_ball”
- json - 如何在另一个依赖于颤动中的搜索输入的类中初始化我的 json 响应?