Я нахожусь в процессе создания библиотеки (клиентская библиотека Ftp), и я хочу, чтобы клиент мог настроить параметры, которые он хочет, в файле конфигурации, файл конфигурации содержит два типа параметров, первый - некоторые параметры, касающиеся директив PHP (max_excution_time ...), второй параметр - конфиги FTP (пассивный режим, автопоиск, основной root ...), для этого я сделал следующее:
abstract class FileConfiguration
{
/** @var array */
protected static $configFile;
public function __construct()
{
self::$configFile = self::$configFile ?: include(__DIR__ . DIRECTORY_SEPARATOR . "Config.php");
}
abstract public function getConfig();
abstract public function setConfig($config);
abstract public function apply();
abstract protected function _validateTypeConstraints();
}
class FtpConfiguration extends FileConfiguration
{
public function __construct(ConnectionInterface $connection, $config)
{
parent::__construct();
$this->setConfig($config);
}
/**
* Implement here the abstract class methods
*/
}
class PhpIniConfig extends FileConfiguration
{
public function __construct($config)
{
parent::__construct();
$this->setConfig($config);
}
/**
* Implement here the abstract class methods
*/
}
// usage
$iniConfig = new PhpIniConfig([
"maxExecutionTime" => 44
]);
$iniConfig->apply();
$configuration = new FtpConfiguration($connection, 'default');
$configuration->apply();
// FtpClient
$ftp = new FtpClient($connection, $configuration);
Я не совсем уверен, правильно ли я поступил или нет, поэтому у меня вопрос, есть ли лучший способ обработки клиентских конфигураций, а не шаблон (файл конфигурации)?