Правильно ли устанавливать конфигурационный 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..");
Я хочу знать: правильный ли это способ настройки конфигурации проекта? Есть ли у этого способа минусы? И если это было неправильно, то какой лучший способ сделать это?
3 ответа
Я нашел эти 2 статьи, которые говорят на одну и ту же тему, и обнаружил, что они очень полезны, поэтому я хотел бы поделиться ими здесь:
1- Использование классов PHP для хранения данных конфигурации
2- Использование класса PHP для хранения конфигурации
Я надеюсь, что они помогут, как они сделали для меня.
Это один из способов сделать это, да. Неплохой способ, ИМО. По сути, класс становится файлом конфигурации, только с синтаксисом PHP.
Есть несколько недостатков:
Вы не можете иметь константные
массивы илиобъекты. (Конечно, у вас также не может быть глобальных константныхмассивов /объектов, так что...) (Начиная с 5.6, вы можете иметь постоянные массивы. Тем не менее, нет никаких const-объектов, хотя. Я почти уверен, что у вас не может быть и константных ресурсов, как это не имеет особого смысла.)Вы можете обойти это, реализовав статический метод получения объектов (который, конечно, закодирован, чтобы всегда возвращать один и тот же объект)... но я рекомендовал бы против этого в большинстве случаев. Это только безопасный вариант, если объекты в вашем конфиге неизменны. (Объекты, которые не предназначены для неизменяемости, слишком легко изменить, даже случайно.)
(Помимо проблемы с изменчивостью, у меня возникает проблема с наличием действующего кода в файле конфигурации... но это в основном личное предпочтение.)
Этот класс имеет другое назначение, чем остальные - он предназначен для изменения в каждом проекте. Возможно, вы захотите оставить класс Config где-нибудь отдельно от остальных классов, например, там, где вы обычно храните файл конфигурации.
С реальным файлом конфигурации, поскольку вы анализируете его во время выполнения, вы можете предположить, что имеете дело с отсутствующим или недействительным файлом (скажем, запустив с настройками по умолчанию, используя какие-либо части, которые можно проанализировать, и / или показывая полезное сообщение об ошибке). Но как только ваша конфигурация запускается как код PHP, любые синтаксические ошибки - или, если вы не учли это, отсутствующий класс Config - остановят приложение на ходу. И если вы работаете с
display_errors
выкл (рекомендуется в производстве), проблема может быть менее очевидной.
Я думаю, что вы хотите, это ключевое слово static!
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. обычно вы не пишете их такими большими, если они являются переменными класса. Большие, как правило, глобалы.