Если isset для констант, но не определен? - PullRequest
4 голосов
/ 23 июня 2011

Если я установил константу = = ''; Как проверить, есть ли внутри что-то постоянное?

defined(), не работает, как я хочу, потому что это определено isset() не работает с константами

Есть ли простой способ?

Ответы [ 3 ]

11 голосов
/ 23 июня 2011

В руководстве говорится, что isset() возвращает информацию о том, установлена ​​ли переменная «[...] и не равна ли NULL».

Константы не являются переменными, поэтому вы не можете их проверить. Вы можете попробовать это, хотя:

define('FOO', 1);

if (defined('FOO') && 1 == FOO) {
// ....
}

Поэтому, когда ваша константа определена как пустая строка, вам сначала нужно проверить, действительно ли она равна defined, а затем проверить ее значение ('' == MY_CONSTANT).

2 голосов
/ 04 февраля 2016

для проверки, если что-то находится внутри, вы можете использовать (начиная с PHP 5.5) пустую функцию. чтобы избежать ошибок, я бы также проверил, существует ли он.

if(defined('FOO')&&!empty(FOO)) {
  //we have something in here.
}

, поскольку empty также оценивает большинство false -подобных выражений (например, '0', 0 и другие вещи, см. http://php.net/manual/de/function.empty.php) как 'empty'

Вы можете попробовать:

if(defined('FOO') && FOO ) {
  //we have something in here.
}

это должно работать, возможно, с большим количеством версий (вероятно, везде, где вы можете запустить условия yoda)

для более строгой проверки вы можете сделать:

if(defined('FOO') && FOO !== '') {
  //we have something in here.
}
0 голосов
/ 17 сентября 2017

Предполагая, что вы присваиваете константу (а не системную константу), используйте следующее:

if(array_key_exists("MY_CONSTANT", get_defined_constants(true)['user'])){
    echo MY_CONSTANT; //do stuff
}

Это работает, потому что результат массива get_defined_constants(true) является массивом всех определенных констант, и все, что вы определяете, сохраняется в подмассиве ['user'].

См. Руководство .

...