При создании веб-сайта у меня всегда был только один файл config.php с кучей констант в нем, и я включаю его в начало каждого файла PHP:
1. config.php
// config.php
$hostname = get_user();
define("HOME", "/home/$hostname/my/website");
define("DB_USER", 'username');
define("DB_PASS", 'password');
Это достаточно просто, и у меня никогда не было с этим проблем. Но это стандартный способ обработки конфигурации на большом веб-сайте PHP?
Я подумал, что было бы лучше содержать всю конфигурацию в классе, например:
2. Класс конфигурации
class Config {
public $home;
const DB_USER = 'username';
const DB_PASS = 'password';
function __construct() {
$hostname = get_current_user();
$this->home = "/home/$hostname/my/website";
}
}
Но это, похоже, усложняет конфигурацию, потому что:
Резюме.
Я понимаю, что класс предоставляет пространство имен, но есть ли что-нибудь более выгодное в том, чтобы поместить конфигурацию в такой класс?
Короче говоря, в наши дни все еще прекрасно придерживаться классического файла config.php, или есть причины, по которым я предпочитаю использовать более ООП-подход к настройке?
Обновлено:
Я также нашел этот ответ очень полезным: https://codereview.stackexchange.com/questions/79528/standard-and-common-config-file-for-core-php-project?newreg=eb97ce022c9f4e8a98a1e2d3547b767a
@Sammitch Спасибо, я не рассматривал возможность использования более простого файла JSON или JSON для конфигурирования и его синтаксического анализа с использованием кода оттуда.






Можно использовать файлы конфигурации всего сайта. Обычно вы используете класс конфигурации для конфигураций, специфичных для библиотеки, чтобы библиотека строго принимала только четко определенные объекты конфигурации в качестве своей зависимости вместо массивов. В качестве бонуса вы получаете дополнительное преимущество в виде подсказки параметров конфигурации.
Файлы конфигурации должны быть именно такими. Файлы. Нет ничего хуже, чем попытка автоматизировать развертывание файла конфигурации неопределенного формата и содержащего исполняемую логику. Выберите что-то вроде INI, JSON, YAML и т. д., И пусть ваша конфигурация класс ничего не делает, кроме анализа конфигурации файл.