У меня есть проект унаследованного кода, который я почти успешно преобразовал, чтобы использовать автозагрузчик, а не несколько миллиардов операторов include и require.
Единственная остающаяся проблема, которая у меня есть, — это файл конфигурации, который настраивает некоторые глобальные вещи конфигурации. Как и сейчас, это простой PHP, который загружает переменные, необходимые приложению.
Моя идея сделать эту работу — преобразовать ее в класс с константами классов для «глобальных» данных. Выполнение постоянных вызовов класса вызовет автозагрузку класса config и поставит все под контроль автозагрузчика.
У меня вопрос, является ли это лучшим способом приблизиться к этому, и если другие сделали что-то подобное?
Поэтому в моем приложении вместо вызова чего-то подобного для доступа к переменным конфигурации.
$GLOBALS['conf']['thingy'];
Это стало бы чем-то вроде этого.
Config::THINGY
Где вещи класс конст.
class Config {
const THINGY = 'yes, this is it';
}
Этот подход также избавляет от глобальных ссылок на данные, что, на мой взгляд, всегда хорошо.
Вы определенно на правильном пути. Как и во всем, что связано с программированием, существует 1 миллион + 1 способ облысения кошки, здесь несколько опций / некоторая информация.
YAML: Интенсивно используется фреймворками, такими как Symfony. Если вы не используете каркас SF, вы можете легко реализовать подставку вдоль SF Yaml синтаксический анализатор. Поддерживает иерархии.
JSON: Отличный способ поддерживать параметры конфигурации, легко переносимый. Поддерживает иерархии.
ини: Вы можете использовать встроенный parse_ini_file функция для загрузки ваших настроек конфигурации, однако иерархии в файлах INI трудно поддерживать, и они достижимы только при использовании произвольного соглашения о пространстве имен.
база данных: Вы могли бы на самом деле сохранить настройки в базе данных (со слоем кэша между постоянным хранилищем и приложением), это полезно, если вы хотите создать веб-интерфейс для пользователей, чтобы изменять значения, не нажимая код.
константы классаНичего плохого в этом подходе нет, однако можно утверждать, что любой из параметров конфигурации был бы немного «чище» и более переносим.
Других решений пока нет …