Использование неопределенной константы PHP версии 7.2

Похоже, что на эту тему есть довольно много сообщений, однако этот случай, похоже, отличается.

В версии PHP выше или равной 7.2 следующий код:

if (!empty($_GET['rxdebug']) || AH_DEBUG){
    define(AH_DEBUG_MODE, true);
}else{
    define(AH_DEBUG_MODE, false);
}

Выдаст ошибку во второй строке определения define(AH_DEBUG_MODE, false);

Use of undefined constant AH_DEBUG_MODE- assumed 'AH_DEBUG_MODE' (this will throw an Error in a future version of PHP) in some-file.php on line xxx

В основном первое определение принимается, второе - нет... Разве код не обрабатывается только один раз? Или какой-то препроцессор запускается заранее, выдавая ошибку, как будто константа определена дважды?


person Riccardo    schedule 28.02.2019    source источник
comment
Имя константы должно быть в кавычках   -  person Justinas    schedule 28.02.2019


Ответы (2)


Должно быть:

define('AH_DEBUG_MODE', true);

Имея: define(AH_DEBUG_MODE, true), вы заставляете PHP оценивать значение константы AH_DEBUG_MODE, которая, очевидно, еще не определена.

Ваш код можно упростить до:

define('AH_DEBUG_MODE', !empty($_GET['rxdebug']) || AH_DEBUG);
person emix    schedule 28.02.2019
comment
Спасибо, приятель, почему это происходит только во втором определении? - person Riccardo; 28.02.2019
comment
Поскольку !empty($_GET['rxdebug']) || AH_DEBUG оценивается как false, выполняется оператор else. - person emix; 28.02.2019

Ваш код должен заключать имя константы в кавычки. Ознакомьтесь с руководством по адресу http://php.net/manual/en/function.define.php

if (!empty($_GET['rxdebug']) || AH_DEBUG){
    define('AH_DEBUG_MODE', true);
}else{
    define('AH_DEBUG_MODE', false);
}
person asiby    schedule 28.02.2019