Итак, я рассматриваю несколько способов хранения данных конфигурации. Я считаю, что я сузил это до 3 способов:
Просто простая переменная
$config = array(
"database" => array(
"host" => "localhost",
"user" => "root",
"pass" => "",
"database" => "test"
)
);
echo $config['database']['host'];
Я думаю, что это слишком изменчиво, поскольку параметры конфигурации не могут быть изменены.
Модифицированный стандартный класс
class stdDataClass {
// Holds the Data in a Private Array, so it cannot be changed afterwards.
private $data = array();
public function __construct($data)
{
// ......
$this->data = $data;
// .....
}
// Returns the Requested Key
public function __get($key)
{
return $this->data[$key];
}
// Throws an Error as you cannot change the data.
public function __set($key, $value)
{
throw new Exception("Tried to Set Static Variable");
}
}
$config = new stdStaticClass($config_options);
echo $config->database['host'];
По сути, все, что он делает - это инкапсулирует вышеуказанный массив в объект и гарантирует, что объект не может быть изменен.
Или статический класс
class AppConfig{
public static function getDatabaseInfo()
{
return array(
"host" => "localhost",
"user" => "root",
"pass" => "",
"database" => "test"
);
}
// .. etc ...
}
$config = AppConfig::getDatabaseInfo();
echo $config['host'];
Это обеспечивает максимальную неизменность, но это также означает, что мне нужно было бы входить и вручную редактировать класс всякий раз, когда я хотел изменить данные.
Как вы думаете, в каком из вышеперечисленных вариантов лучше всего хранить параметры конфигурации? Или есть лучший способ?