Могут ли значения PHP-констант быть изменены для каждого HTTP-запроса?

Я хотел бы знать из 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-запросе.

0

Решение

Типичный вариант использования будет что-то вроде:

define('DEBUG', !empty($_GET['debug']));

if (DEBUG) echo 'some debugging statement';

Очевидно, не делай этого только основанный на параметре запроса, особенно не в производстве, но вы поняли идею.

Так что да, установка постоянных значений на основе запроса — это хорошо. Является ли это лучшим решением в вашем конкретном случае, сомнительно, и я не знаю. Я бы зарезервировал его для «мета» значений, таких как флаги отладки, а не для значений, которые по сути являются функциональными параметрами, входами для вашей бизнес-логики. Делайте это экономно.

«Постоянные значения», которые влияют на то, как каждый скрипт работает независимо от запроса, будут выглядеть как файлы конфигурации или переменные среды, например, содержащие учетные данные доступа к базе данных и тому подобное.

1

Другие решения

Константы должны не изменить во время запроса, но, как вы сказали, ваш не так, я думаю, что вы в порядке там.

Они представляют собой фиксированные вещи, такие как количество разрешенных соединений с БД, имя приложения и т. Д. Если вы пытаетесь использовать их для хранения состояния вашего приложения, то вы можете подумать о том, чтобы сделать что-то вроде:

<?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) {
...
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector