Я видел много людей, использующих
defined('XXX') or define('XXX', 'XXX');
вместо
if(!defined('XXX')){ define('XXX', 'XXX'); }
Первый код делает то же самое?Почему люди используют это?
Эта функция называется оценка короткого замыкания , и она распространена во многих языках.Булевы выражения оцениваются слева направо и оценка останавливается, когда результат уже есть.В этом случае, если константа определена, выражение равно TRUE независимо от другого термина, поэтому define () не выполняется.
TRUE
Они делают то же самое.Первый просто короче написать.Аналогично использованию
mysql_connect(...) or die('some error');
Правая сторона логического OR оценивается, только если левая сторона FALSE.
OR
FALSE
Он делает то же самое, полагаясь на тот факт, что логическое ИЛИ требует вычисления второго операнда, если первый оценивается как ЛОЖЬ.
Я бы не стал использовать этот метод слишком широко, так как он имеет тенденцию к "условия короткого замыкания (т. е. TRUE or f(); - f () никогда не будет вызываться)
TRUE or f();
делает то же самое. В основном это (ИСТИНА) или ЛОЖНАЯ АЛЬТЕРНАТИВА