Правильно ли задавать конфигурационный класс PHP для сохранения настроек проекта?
Я хочу создать файл config.php для сохранения различных значений конфигурации, которые обычно меняются из проекта в проект, и я хочу определить класс, чтобы сохранить значения конфигурации в этом файле следующим образом:
class Config {
const DB_SERVER = 'localhost',
DB_NAME = 'abc',
DB_USERNAME = 'admin',
DB_PASSWORD = '12345',
WEBSITE_NAME = 'My New Website',
IMAGE_DIR = 'img';
}
и т.д., я хочу определить все значения как константы внутри класса, и я буду называть их следующим:
$connection = mysql_connect(Config::DB_SERVER, Config::DB_USERNAME, Config::DB_PASSWORD) or die("Database connection failed..");
Я хочу знать: Правильно ли этот способ настройки конфигурации проекта? У этого пути есть какие-то недостатки? И если это было неправильно, то какой лучший способ сделать это?
Ответы
Ответ 1
Я нашел эти 2 статьи, которые говорят об одной и той же теме, и я обнаружил, что они очень полезны, поэтому я хотел бы поделиться ими здесь:
1- Использование классов PHP для хранения данных конфигурации
2- Использование класса PHP для сохранения конфигурации
Я надеюсь, что они помогут, как и для меня.
Ответ 2
Это один из способов сделать это, да. Не так уж плохо, ИМО. В основном класс становится конфигурационным файлом, просто с синтаксисом PHP.
Есть несколько недостатков:
-
Вы не можете создавать объекты const или. (Конечно, вы не можете иметь глобальные константные объекты arrays/, поэтому...) (Начиная с 5.6, вы можете иметь постоянные массивы. Тем не менее, никаких объектов const. Я уверен, что вы также не могут иметь константные ресурсы, поскольку это не имеет большого смысла.)
Вы можете обойти это, внедряя статический getter для объектов (который, конечно же, закодирован, чтобы всегда возвращать один и тот же объект)... но я бы рекомендовал против него в большинстве случаев. Это только безопасный вариант, если объекты в вашей конфигурации неизменяемы по дизайну. (Объекты, которые не предназначены для неизменности, слишком легко изменить, даже случайно.)
(Помимо проблемы с изменчивостью, это заставляет меня иметь фактический текущий код в файле конфигурации... но это в основном личные предпочтения.)
-
Этот класс имеет другую цель, чем остальные - он предназначен для изменения для каждого проекта. Вы можете подумать о том, чтобы сохранить класс Config где-то отдельно от остальных классов, например, если вы обычно сохраняете файл конфигурации.
-
С реальным конфигурационным файлом, поскольку вы анализируете его во время выполнения, вы, возможно, имеете дело с отсутствующим или недопустимым файлом (скажем, путем запуска с настройками по умолчанию, с использованием разделов и/или отображения полезных сообщение об ошибке). Но как только ваша конфигурация работает как PHP-код, любые синтаксические ошибки - или, если вы не учли ее, отсутствующий класс Config - остановит приложение мертвым на своих дорожках. И если вы работаете с display_errors
off (рекомендуется в процессе производства), проблема может быть менее очевидной.
Ответ 3
Я думаю, что вам нужно static-keyword!
class Config {
static $DB_SERVER = 'localhost';
static $DB_NAME = 'abc';
static $DB_USERNAME = 'admin';
static $DB_PASSWORD = '12345';
static $WEBSITE_NAME = 'My New Website';
static $IMAGE_DIR = 'img';
}
вот так. Вы не можете назвать их с помощью ::
, например. Config::$DB_SERVER
.
Btw. обычно вы не пишете их большими, как если бы они были переменными класса. Большие средние значения - обычно.