У меня есть структура классов для создания файлов FDF, которая меняется каждый год. Эти классы создают массивы, и эти массивы преобразуются в строки fdf, но это сейчас не важно.
мой первый класс - Fdf13, который составляет полный массив:
class Fdf13 extends FdfBaseStuff
{
protected function fdfArray()
{
$this->buildPart1Dic();
$this->buildPart1();
$this->buildPart3();
$this->buildPart4();
$this->buildPart5();
$this->buildPart6();
$this->buildPart7();
$this->buildPart8();
$this->buildPart9();
$this->buildPart10();
$this->buildPart11();
return $this->ret;
}
protected function buildPart5()
{
$this->ret = $this->add($this->ret, $this->calculator->lorem, '32');
$this->ret = $this->add($this->ret, $this->calculator->ipsum, '33');
$this->ret = $this->add($this->ret, $this->calculator->sit, '34');
$this->ret = $this->add($this->ret, $this->calculator->amet, '35');
}
...
}
В следующем году мне нужен новый класс, Fdf14. Я должен поместить одну новую строку в builsPart5
, что 33a. мой Fdf14 наследует от Fdf13
class Fdf14 extends Fdf13
{
protected function buildPart5()
{
$this->ret = $this->add($this->ret, $this->calculator->lorem, '32');
$this->ret = $this->add($this->ret, $this->calculator->ipsum, '33');
$this->ret = $this->add($this->ret, $this->calculator->dolor, '33a'); // new item
$this->ret = $this->add($this->ret, $this->calculator->sit, '34');
$this->ret = $this->add($this->ret, $this->calculator->amet, '35');
}
...
}
У меня есть куча дублированных строк в Fdf14, 15, ... 20. метод add
просто добавляет его возвращаемое значение (строку) к $ this- > ret массив.
Как это можно сделать с минимумом дублированных строк? Я думал просто добавить новые значения в массив ret в дочерних классах, но порядок элементов имеет значение. (Не в fdf, но у меня также есть компоновщик XML), поэтому я не могу просто добавить новое значение.
Моя вторая идея - создать массив 'schema' в классе нового года с правильным порядком. элементов, но с нулевыми значениями и обновите эти значения в методах buildPartX
, но это должен быть более элегантный подход.