$provider) { if (!($provider instanceof GetDistanceInterface)) { throw new \InvalidArgumentException( 'LatLng provider ' . $providerCode . ' must implement ' . GetDistanceInterface::class ); } } $this->providers = $providers; $this->getDistanceProviderCode = $getDistanceProviderCode; } /** * @inheritdoc * @throws NoSuchDistanceProviderException */ public function execute(LatLngInterface $source, LatLngInterface $destination): float { $code = $this->getDistanceProviderCode->execute(); if (!isset($this->providers[$code])) { throw new NoSuchDistanceProviderException( __('No such distance provider: %1', $code) ); } return $this->providers[$code]->execute($source, $destination); } }