identifier = $identifier; $this->options = $options; $this->version = $version; } public function getIdentifier(): string { return $this->identifier; } public function getVersion(): ?string { return $this->version; } public function open(): ReaderInterface { $filename = $this->options['filename']; $reader = $this->determineReaderForFile($filename); $inst = new $reader($filename, $this->options); return $inst; } private function determineReaderForFile(string $filename): string { if ($reader = $this->options['reader']??null) { return $reader; } $ext = pathinfo($filename, PATHINFO_EXTENSION); return match ($ext) { 'json' => JsonReader::class, 'csv' => CsvReader::class, default => throw new \RuntimeException("Unable to determine reader for dataset file") }; } }