class DeliveryManager
{
private $deliveries = [];
public function setDelivery(DeliveryInterface $delivery)
{
$this->deliveries[$delivery->getId()] = $delivery;
}
public function setDeliveryClass(int $id, string $className, array $config = [])
{
$config['id'] = $id;
$delivery = new $className($config);
$this->setDelivery($delivery);
}
public function getDelivery(int $id): DeliveryInterface
{
if (!isset($this->deliveries[$id])) {
throw new InvalidArgumentException("Delivery #$id not found");
}
return $this->deliveries[$id];
}
}
мы к массиву арифметически прибавляем строку(или?)мы складываем 2 массива
Менеджер так понял создает свой конфиг при регистрации СД и передает их к классам доставок? Правильно?это упрощенный пример, в реальном коде используется абстрактная фабрика для создания DeliveryInterface объектов, которая в свою очередь использует DI контейнер.
class Address
{
public function getId(): ?int {}
public function getCountry(): string {}
public function getCountryCode(): int {}
public function getRegion(): string {}
public function getRegionCode(): int {}
public function getSettlement(): string {} // поселение - город, деревня, село
public function getSettlementId(): int {}
public function getStreet(): ?string {} // адрес: улица, дом, квартира/офис
public function getZipCode(): ?string {} // почтовый индекс
public function getCoordinates(): ?array {} // координаты: широта и долгота для отображения на карте
public function __toString(): string {} // строка адреса: страна, регион и т.д.
}
data_json:json содержит json строку как и data_string.data_json используется для хранения исходного варианта и поэтому тип поля text
Потом через div и mod вытаскиваешь нужную составляющую.a как? и почему не 10 х 8 х 15?
{"%s": %d, "%s": %d, "%s": %d}
, data_json:json содержит json строку как и data_string. как итог: никаких изменений
order_deliveries (id, classname, is_active, ...) - доступные службы доставки, таблица с основными данными
и order_delivery_settings (id, delivery_id, name, value) - настройки служб доставки, $config в примере
На их основе менеджер строит список способов доставки или создает объекты служб доставки.
Классы служб доставки наследуют абстрактный класс BaseDelivery реализующий DeliveryInterface:
Методы isAllowedAddress и calculateCost реализуются в классах доставки.
В реальном коде в конструктор передается $id конфигурации доставки данного класса и по нему загружаются данные из БД (классы доставки реализуют паттерн ActiveRecord)