Проверка на неопределенные константы - PullRequest
2 голосов
/ 24 июля 2011

Я видел много людей, использующих

defined('XXX') or define('XXX', 'XXX');

вместо

if(!defined('XXX')){
  define('XXX', 'XXX');
}

Первый код делает то же самое?Почему люди используют это?

Ответы [ 4 ]

2 голосов
/ 24 июля 2011

Эта функция называется оценка короткого замыкания , и она распространена во многих языках.Булевы выражения оцениваются слева направо и оценка останавливается, когда результат уже есть.В этом случае, если константа определена, выражение равно TRUE независимо от другого термина, поэтому define () не выполняется.

1 голос
/ 24 июля 2011

Они делают то же самое.Первый просто короче написать.Аналогично использованию

mysql_connect(...) or die('some error');

Правая сторона логического OR оценивается, только если левая сторона FALSE.

0 голосов
/ 24 июля 2011

Он делает то же самое, полагаясь на тот факт, что логическое ИЛИ требует вычисления второго операнда, если первый оценивается как ЛОЖЬ.

Я бы не стал использовать этот метод слишком широко, так как он имеет тенденцию к "условия короткого замыкания (т. е. TRUE or f(); - f () никогда не будет вызываться)

0 голосов
/ 24 июля 2011

делает то же самое. В основном это (ИСТИНА) или ЛОЖНАЯ АЛЬТЕРНАТИВА

...