php - 更改类中的构造函数参数后,如何标记任何需要更新的子类?
问题描述
我有一堂课叫PdfRenderer
class PdfRenderer
{
function __construct(Fpdi $pdf)
{
$this->pdf = $pdf;
}
}
我也有课PdfProposalRenderer
class PdfProposalRenderer extends PdfRenderer
{
function __construct(Fpdi $pdf, array $filename)
{
parent::__construct($pdf);
}
}
我需要PdfRenderer
通过在构造函数中添加一个新参数来更改类:
class PdfRenderer
{
function __construct(Fpdi $pdf, StreamFactory $streamFactory)
{
$this->pdf = $pdf;
$this->streamFactory = $streamFactory;
}
}
通常,在此更改之后,我会在代码库中搜索任何出现的“新 PdfRenderer”,如果有,我会更新这些地方的实例化参数。这就是所有需要做的,对吧?还有别的事吗?通常没有?所以这就是我通常停下来的地方。
好吧,现在问题出在这里..我有很多课,我并不总是记得...
在我的情况下
PdfProposalRenderer
扩展PdfRenderer
“,所以我需要进入PdfProposalRenderer
和进入construct
方法来更新parent::__construct($pdf)
行以匹配我在参数中所做的更改PdfRenderer
另外,还有其他扩展的类
PdfRenderer
吗?也许,我必须检查一下,现在我知道了这一点。
但通常我不运行这样的检查,所以这种类型的更改会丢失,直到PdfProposalRenderer
实时代码中断。
问题
有没有办法修改构造函数中PdfProposalRenderer
或其他地方的代码,当我更新构造函数参数时PdfRenderer
,更痛苦的是,我也需要在那些地方更改它?
例如,有没有办法修改PdfProposalRenderer's constructor say
new PdfRenderer`中的代码?
如果没有,除了在代码库中搜索“extends PdfRenderer”然后检查任何“parent::__construct”代码行之外,还有其他方法可以检查该更改吗?
解决方案
实施 MER 的建议:
PdfProposalRenderer
独自离开并这样做:
class PdfRenderer
{
function __construct(Fpdi $pdf, StreamFactory $streamFactory = null)
{
$this->pdf = $pdf;
$this->streamFactory = $streamFactory ?? new StreamFactory();
}
}
另外,在PdfProposalRenderer
我决定按名称调用父类,所以而不是
parent::__construct($pdf);
我用了
PdfRenderer::__construct($pdf);
推荐阅读
- html - 如何在表格中的 TD 列之间添加间距?
- javascript - 下拉菜单需要多次点击才能打开
- python - 最小和最大功能来计算最小信用卡余额
- android - “命令失败:./gradlew installDebug”问题(react-native run-android)
- javascript - React Pagination:如何在点击时加载第二页数据
- html - 如果可能,我如何使用 selenium 来识别嵌套框架中的元素?
- wix3.10 - WiX 工具集灾难性故障运行 light.exe
- ios - 从另一个类访问@IBOutlet
- mysql - MySQL table.column 不更新
- c++ - 为什么下面的类不对数组 arr 进行浅拷贝?