Правильно ли устанавливать конфигурационный 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. обычно вы не пишете их такими большими, если они являются переменными класса. Большие, как правило, глобалы.

Другие вопросы по тегам