> */ protected $data = null; protected string $cacheKey = 'ormMetadata'; protected bool $useCache; protected Metadata $metadata; protected FileManager $fileManager; protected DataCache $dataCache; protected Config $config; private ?Converter $converter = null; public function __construct( Metadata $metadata, FileManager $fileManager, DataCache $dataCache, Config $config ) { $this->metadata = $metadata; $this->fileManager = $fileManager; $this->dataCache = $dataCache; $this->config = $config; $this->useCache = (bool) $this->config->get('useCache', false); } protected function getConverter(): Converter { if (!isset($this->converter)) { $this->converter = new Converter($this->metadata, $this->fileManager, $this->config); } return $this->converter; } /** * @return array> */ public function getData(bool $reload = false): array { if (isset($this->data) && !$reload) { return $this->data; } if ($this->useCache && $this->dataCache->has($this->cacheKey) && !$reload) { /** @var array> */ $data = $this->dataCache->get($this->cacheKey); $this->data = $data; return $this->data; } $this->data = $this->getConverter()->process(); if ($this->useCache) { $this->dataCache->store($this->cacheKey, $this->data); } return $this->data; } /** * @param string|string[]|null $key * @param mixed $default * @return mixed */ public function get($key = null, $default = null) { return Util::getValueByKey($this->getData(), $key, $default); } }