Как я должен сохранить настройки для проекта?
Который лучше - для использования a $settings
массив со всеми моими настройками:
$settings['max_photos'] = 30;
//...
или создайте одиночный элемент Config
класс со всеми настройками в нем?
Class Config {
private $max_photos = 30;
//...
}
Какие-либо хорошие примеры?
Я думаю, что лучше всего использовать константы для конфигурации. Например, используя константы класса:
class Config {
const
max_photos = 30,
something_else = 100,
// ...
;
}
echo Config::max_photos;
Если у вас есть PHP 5.3, вы также можете определить их как глобальные константы:
const MAX_PHOTOS = 30;
echo MAX_PHOTOS;
Но я думаю, что это гораздо менее чисто и просто.
Очевидно, это будет работать только до тех пор, пока вы сохраняете только константы, то есть скалярные значения, не являющиеся выражениями. Например, если ваша конфигурация содержит массивы, это больше не будет работать. В этом случае я бы использовал класс Config с общедоступными статическими свойствами:
class Config {
public static $per_page = 30;
public static $array = array(...);
}
echo Config::$per_page;
Последний очень похож на подход к массиву $ config
, но имеет то преимущество (или это может быть недостатком?), Что class доступен отовсюду, включая функции и классы, тогда как массив доступен только в глобальном пространстве, если вы не импортируете его в функции / классы с помощью global $ config;
.
Лучше всего сохранить настройки в файле. и для управления этим файлом объявите класс, который выполняет операции с файлом
Если настройки проекта слишком тяжелые, то подойдет файл (лучше xml) и специальный класс для настроек.
Если настройки проекта небольшие, то лучше всего использовать массив, он работает очень быстро и проблем, связанных с вводом-выводом, не возникает.
Даже вы можете использовать базу данных (медленнее и проблема с авторизацией).
Если вы выберете подход с использованием массива, вы можете использовать литералы массива для более читаемого кода:
$settings = array(
'max_photos' => 30,
'max_width' => 100
//...
)
Мои два цента: Используйте оба. Большинство параметров конфигурации приложения должны находиться в глобальной переменной массива. Данные конфигурации должны быть доступны из разных частей приложения, и именно для этого нужны глобальные переменные. А хранить все вместе в массиве - наиболее разумно. Массив может быть расширен, например, некоторые параметры устанавливаются в config.php, а остальные считываются из config.ini.
Но есть место и для КОНСТАНТ. Тонкая грань заключается в том, является ли опция действительно чем-то, что МОЖЕТ измениться во время работы приложения, или это скорее фиксированное/магическое значение. Если после настройки вы не должны менять параметры приложения (иначе рендеринг может не работать), то этот параметр не должен быть в массиве, а должен быть зафиксирован как константа. (Это интерпретативное правило, но мне оно помогло)
.