Каков наилучший способ (с точки зрения кодирования) получить переменные конфигурации в приложении PHP?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Каков наилучший способ (с точки зрения кодирования) получить переменные конфигурации в приложении PHP?

Сообщение Anonymous »

Я много искал и читал о том, как лучше всего (с точки зрения кода) получить переменные конфигурации приложения в среде PHP. После этого я суммировал два наиболее часто используемых способа управления файлами конфигурации и переменными.

Но меня это немного смущает: один, метод 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');
}
Метод 2: использование нестабильного объекта

В этом сценарии я использую объект класса конфигурации.

Пример кода:

Код: Выделить всё

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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»