feed}, Цвет: {$this->paginator}, Двигатель: {$this->button}"; } } interface PageBuilder { public function setFeed(): PageBuilder; public function setPaginator(): PageBuilder; // public function setBuild(string $engine): PageBuilder; // ... другие методы для установки свойств public function build(): Page; } // ConcreteBuilder class MusicPageBuilder implements PageBuilder { private Car $car; public function __construct() { $this->car = new Car(); } public function setModel(string $model): CarBuilder { $this->car->model = $model; return $this; } public function setColor(string $color): CarBuilder { $this->car->color = $color; return $this; } public function setEngine(string $engine): CarBuilder { $this->car->engine = $engine; return $this; } // ... другие методы для установки свойств public function build(): Car { return $this->car; } } // Director (необязательный) class CarDirector { public function constructCar(CarBuilder $builder): Car { return $builder->setModel('BMW X5')->setColor('Черный')->setEngine('V8')->build(); } } // Клиентский код $builder = new ConcreteCarBuilder(); $car = $builder->setModel('Audi A6')->setColor('Синий')->setEngine('V6')->build(); echo $car . PHP_EOL; $director = new CarDirector(); $car2 = $director->constructCar($builder); echo $car2; exit(); define('LIMIT', 5); define('OFFSET', 0); // class Paginator // { const LIMIT = 5; const OFFSET = 0; private $data = []; private $limit = null; private $offset = null; private $feed = ""; private $paginator = ""; public function __construct($data) { $this->data = $data; $this->limit = isset($_GET['limit']) ? $_GET['limit'] : self::LIMIT; $this->offset = isset($_GET['offset']) ? $_GET['offset'] : self::OFFSET; } public function setFeed() { $portial = array_slice($this->data, $this->offset, $this->limit); $this->feed = '