client, ...] */ private $clients = []; public function __construct( Config $config, Serializer $serializer, ClientFactory $clientFactory ) { $this->config = $config; $this->serializer = $serializer; $this->clientFactory = $clientFactory; } public function get(?string $searchEngine = null, ?array $options = null): ClientInterface { $searchEngine = $searchEngine ?? $this->config->getEngine(); $options = $options ?? $this->config->prepareConnectionData($options ?? []); $cacheKey = $this->getCacheKey($searchEngine, $options); if (!isset($this->clients[$cacheKey])) { $this->clients[$cacheKey] = $this->clientFactory->create($searchEngine, $options); } return $this->clients[$cacheKey]; } private function getCacheKey(string $searchEngine, array $options): string { $options['engine'] = $searchEngine; $serializeData = $this->serializer->serialize(ksort($options)); return sha1($serializeData); } }