Массив $settings или Класс Конфигурации для хранения настроек проекта?

Как я должен сохранить настройки для проекта?

Который лучше - для использования a $settings массив со всеми моими настройками:

$settings['max_photos'] = 30;
//...

или создайте одиночный элемент Config класс со всеми настройками в нем?

Class Config {
    private $max_photos = 30;
    //...
}

Какие-либо хорошие примеры?

8
задан Eric 17 July 2010 в 09:31
поделиться

6 ответов

Подойдет любой вариант, делайте то, что вам удобнее.

2
ответ дан 5 December 2019 в 10:38
поделиться

Я думаю, что лучше всего использовать константы для конфигурации. Например, используя константы класса:

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; .

11
ответ дан 5 December 2019 в 10:38
поделиться

Лучше всего сохранить настройки в файле. и для управления этим файлом объявите класс, который выполняет операции с файлом

1
ответ дан 5 December 2019 в 10:38
поделиться

Если настройки проекта слишком тяжелые, то подойдет файл (лучше xml) и специальный класс для настроек.

Если настройки проекта небольшие, то лучше всего использовать массив, он работает очень быстро и проблем, связанных с вводом-выводом, не возникает.

Даже вы можете использовать базу данных (медленнее и проблема с авторизацией).

0
ответ дан 5 December 2019 в 10:38
поделиться

Если вы выберете подход с использованием массива, вы можете использовать литералы массива для более читаемого кода:

$settings = array(
    'max_photos' => 30,
    'max_width'  => 100
    //...
)
1
ответ дан 5 December 2019 в 10:38
поделиться

Мои два цента: Используйте оба. Большинство параметров конфигурации приложения должны находиться в глобальной переменной массива. Данные конфигурации должны быть доступны из разных частей приложения, и именно для этого нужны глобальные переменные. А хранить все вместе в массиве - наиболее разумно. Массив может быть расширен, например, некоторые параметры устанавливаются в config.php, а остальные считываются из config.ini.

Но есть место и для КОНСТАНТ. Тонкая грань заключается в том, является ли опция действительно чем-то, что МОЖЕТ измениться во время работы приложения, или это скорее фиксированное/магическое значение. Если после настройки вы не должны менять параметры приложения (иначе рендеринг может не работать), то этот параметр не должен быть в массиве, а должен быть зафиксирован как константа. (Это интерпретативное правило, но мне оно помогло)

.
1
ответ дан 5 December 2019 в 10:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: