Database/src/Configuration/DatabaseFactory.php

51 lines
1.5 KiB
PHP

<?php
namespace Nest\Database\Configuration;
use Nest\Database\Database;
use Nest\Database\Exceptions\Configuration\MissingRequiredConfigurationValueException;
/**
* Create a database object from a configuration array.
*/
abstract class DatabaseFactory
{
/**
* @param string $databaseIdentifier Database identifier.
* @param array $configuration Database configuration array.
*/
public function __construct(protected string $databaseIdentifier, protected array $configuration)
{}
/**
* Get a required configuration value.
* @param string $configKey Configuration key.
* @return mixed Configuration value.
* @throws MissingRequiredConfigurationValueException
*/
public function getRequiredConfig(string $configKey): mixed
{
if (!isset($this->configuration[$configKey]))
throw new MissingRequiredConfigurationValueException($this->databaseIdentifier, static::class, $configKey);
return $this->configuration[$configKey];
}
/**
* Get an optional configuration value.
* @param string $configKey Configuration key.
* @param mixed|null $default Default configuration value.
* @return mixed Configuration value.
*/
public function getOptionalConfig(string $configKey, mixed $default = null): mixed
{
return $this->configuration[$configKey] ?? $default;
}
/**
* Make the database object from its configuration array.
* @return Database The created database.
* @throws MissingRequiredConfigurationValueException
*/
public abstract function make(): Database;
}