После изменения параметров конструктора в классе, как я могу пометить любой из дочерних классов, которые также должны быть обновлены? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть класс с именем 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;
    }
}

Обычно после этого изменения я ищу в кодовой базе любые вхождения "new PdfRenderer", и если они есть, я обновляю параметры инстанции в этих местах. Это все, что нужно сделать, верно? Есть ли еще что-нибудь? Обычно нет? Вот где я обычно останавливаюсь.


Ну, вот в чем проблема ... У меня много уроков, я не всегда это помню ...

В моем случае PdfProposalRenderer расширяет PdfRenderer ", поэтому мне нужно перейти к PdfProposalRenderer и методу construct, чтобы обновить строку parent::__construct($pdf) в соответствии с изменениями, которые я внес в параметры PdfRenderer

Кроме того, существуют ли другие классы, расширяющие PdfRenderer? Может быть, я должен проверить, теперь, когда я знаю об этом.

Но обычно я не запускаю такие проверки, поэтому изменения такого типа пропадают до тех пор, пока PdfProposalRenderer не прервется в реальном коде.

Вопрос

Есть ли способ изменить код в конструкторе PdfProposalRenderer или в других местах, где, когда я обновляю параметры конструктора в PdfRenderer, более болезненно очевидно, что мне нужно изменить его и в этих местах

Например, есть ли способ изменить код в PdfProposalRenderer's constructor say new PdfRenderer`?

Если нет, есть ли другие способы проверить это изменение, кроме поиска в кодовой базе слова "extends PdfRenderer" и последующей проверки на наличие строк кода "parent :: __ construct"?

1 Ответ

0 голосов
/ 21 июня 2019

Реализация предложения 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);
...