Но меня это немного смущает: один, метод 1, использует статический класс. Другой, метод 2, использует экземплярный класс.
Первый из них хуже подходит для модульного тестирования, чем второй. И это похоже на глобальную переменную. Не так ли?
Второму нужна глобальная переменная, чтобы использовать созданный объект.
Я попытаюсь объясниться.
Факты:
- Настройки приложения хранятся в INI-файле.
- В этом INI-файле есть разделы, чтобы поддерживать переменные конфигурации.
- У меня есть только один INI-файл.
— Класс выполняет некоторую проверку файла конфигурации.
— Примеры кода ниже не являются полными, это всего лишь образец, иллюстрирующий мой вопрос.
Метод 1: использование статического класса
В этом методе используется статический класс Config, он использует статический, потому что во всех будет использоваться только один объект Config. приложение.
Пример кода:
Код: Выделить всё
class Config
{
static private $data;
static public function load($configFile) {
self::$data = parse_ini_file($configFile, true, INI_SCANNER_RAW)
}
static public get($key) {
// code stuff to deal with sections and keys, but basically
return self::$data[$key];
}
}
Код: Выделить всё
\Config::load('/where/is/my/ini/file.ini');
Код: Выделить всё
$host = \Config::get('database.host');
function example()
{
echo \Config::get('another.value');
}
В этом сценарии я использую объект класса конфигурации.
Пример кода:
Код: Выделить всё
class Config {
private $data = array();
public function __construct($configFile) {
$this->data = parse_ini_file($configFile, true, INI_SCANNER_RAW)
}
public function get($key) {
// code stuff to deal with sections and keys, but basically
return $this->data[$key];
}
public function __get($key) {
return $this->get($key);
}
}
Код: Выделить всё
$settings = new \Config('/where/is/my/ini/file.ini');
$host = $settings->get('database.host');
echo $settings->database->host;
Код: Выделить всё
global $settings;
$settings = new \Config('/where/is/my/ini/file.ini');
function example()
{
global $settings;
echo $settings->get('another.value');
}
Заранее спасибо, что прочитали и ответили на мой вопрос.>
Подробнее здесь: https://stackoverflow.com/questions/245 ... pplication
Мобильная версия