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