Содержание

Использование констант для настройки системных параметров

В Limb3 выработавшейся практикой стало использование констант для настройки определенных системных параметров. Большинство констант начинаются с ключевого слова LIMB_, однако есть константы шаблонизатора WACT, которые имеют префикс WACT_

Почему же именно константы, а, скажем, не глобальные переменные или настроечные файлы? Давайте по-порядку:

Используем константу:

require_once(LIMB_VAR_DIR . '/foo.php');

Используем некую подсистему для получения параметров:

require_once(get_conf_value('LIMB_VAR_DIR', 'common.ini') . '/foo.php');//вводим зависимость от get_conf_value и наличия файла common.ini

Использование оператора @ для объявления констант

Если присмотреться ко всем объявлениями констант в Limb3, то можно увидеть, что почти каждая константа объявляется совместно с оператором подавления ошибки «@». Сделано это для того, чтобы константы можно было объявлять где-то выше с иными значениями.

Например, где-то в модуле foo.php объявляется константа LIMB_FOO:

foo.php

<?php
..
@define('LIMB_FOO', 'hey');
...
?>

Предположим, что базовый скрипт инициализации setup.php приложения подключает foo.php, тогда в setup.php можно как бы «переобъявить» константу LIMB_FOO, т.е, по сути, объявить ее раньше:

setup.php

<?php
..
@define('LIMB_FOO', 'wow');
..
require_once('foo.php');
?>

Возникает резонный вопрос, почему не использовать конструкцию if(!defined('LIMB_FOO')){define('LIMB_FOO', …)}, ведь оператор @ является довольно медленным? Ну во-первых, объявлений констант не так много, чтобы это существенно повлияло на общее время работы приложения. А во-вторых, на наш взгляд, использовать @ намного проще чем длинную if(..) конструкцию.

Список наиболее часто используемых констант

Документацию на не перечисленные здесь константы стоит искать в описании конкретного пакета.

@define('LIMB_VAR_DIR', dirname(__FILE__) . '/var');
@define('LIMB_CACHE_DB_META_IN_FILE', true);//включаем кеширование
@define('LIMB_SESSION_USE_DB_DRIVER', true);//используем БД
@define('LIMB_INI_INCLUDE_PATH', 'tests/settings;settings');
@define('LIMB_CONF_INCLUDE_PATH', 'tests/settings;settings');