'DeliveryMethodEmail', ]; /** * Фабричный метод создания объекта способа доставки справки по типу. * * @param string|null $type Тип способа доставки справки * * @return AbstractDeliveryMethod */ public function factory(?string $type = null): AbstractDeliveryMethod { if (empty($type)) { throw new InvalidArgumentException('Invalid statement.delivery_method type value in statement.delivery_method factory'); } if (!array_key_exists($type, $this->typeClassMap)) { throw new InvalidArgumentException('Invalid statement.delivery_method data type "' . $type . '"'); } $className = __NAMESPACE__ . '\\' . $this->typeClassMap[$type]; return new $className(); } /** * Фабричный метод создания объекта способа доставки справки из массива. * * @param array|null $data Массив платежных данных * @param string|null $type Тип способа доставки справки */ public function factoryFromArray(?array $data = null, ?string $type = null): AbstractDeliveryMethod { if (null === $type) { if (array_key_exists('type', $data)) { $type = $data['type']; unset($data['type']); } else { throw new InvalidArgumentException( 'Parameter type not specified in DeliveryMethodFactory.factoryFromArray()' ); } } $paymentData = $this->factory($type); foreach ($data as $key => $value) { if ($paymentData->offsetExists($key)) { $paymentData->offsetSet($key, $value); } } return $paymentData; } }