Я хотел бы знать из POV проекта, не рекомендуется ли изменять значение константы для каждого HTTP-запроса или это совершенно нормально.
У меня есть несколько констант, которые определены в начале скрипта PHP, и они используются для выяснения определенного контекста (что пытается сделать пользователь в то время). Константы никогда не меняются на протяжении жизненного цикла сценария, поэтому они соответствуют правилам констант и работают хорошо. Однако значения этих констант зависят от того, что делает пользователь. Мне интересно, не рекомендуется ли это или совершенно приемлемо в PHP.
<?php
// This function is only run once per HTTP request at the start
function new_paper() {
define('NEW_PAPER', 1);
define('NEW_VERSION', 0);
}
// This function is also only run once per HTTP request at the start
function new_paper_version() {
define('NEW_PAPER', 0);
define('NEW_VERSION', 1);
}
// This function is subsequently called by both functions above
function a_handler_of_sorts() {
if (NEW_PAPER) {
// Do something if it's a new paper
}
elseif (NEW_VERSION) {
// Do something if it's a new version
}
else {
}
}
Ни при каких обстоятельствах оба new_paper()
а также new_paper_version()
запустить в том же HTTP-запросе.
Типичный вариант использования будет что-то вроде:
define('DEBUG', !empty($_GET['debug']));
if (DEBUG) echo 'some debugging statement';
Очевидно, не делай этого только основанный на параметре запроса, особенно не в производстве, но вы поняли идею.
Так что да, установка постоянных значений на основе запроса — это хорошо. Является ли это лучшим решением в вашем конкретном случае, сомнительно, и я не знаю. Я бы зарезервировал его для «мета» значений, таких как флаги отладки, а не для значений, которые по сути являются функциональными параметрами, входами для вашей бизнес-логики. Делайте это экономно.
«Постоянные значения», которые влияют на то, как каждый скрипт работает независимо от запроса, будут выглядеть как файлы конфигурации или переменные среды, например, содержащие учетные данные доступа к базе данных и тому подобное.
Константы должны не изменить во время запроса, но, как вы сказали, ваш не так, я думаю, что вы в порядке там.
Они представляют собой фиксированные вещи, такие как количество разрешенных соединений с БД, имя приложения и т. Д. Если вы пытаетесь использовать их для хранения состояния вашего приложения, то вы можете подумать о том, чтобы сделать что-то вроде:
<?php
define('STATE_PAPER', 0);
define('STATE_VERSION', 1);
define('STATE_INVALID', 2);
$applicationState = null;
if (someCheckForPaper() === true) {
$applicationState = NEW_PAPER;
} else if (someCheckForVersion() === true) {
$applicationState = NEW_VERSION;
} else {
$applicationState = STATE_INVALID;
}
// Save $applicationState somewhere... maybe session?
// Somewhere else
if ($applicationState === STATE_PAPER) {
...
}