Да. Однако он основан на способе, которым PHP реализует логическую оценку , и не должен рассматриваться как идиоматическая конструкция. Он почти наверняка будет работать в будущих выпусках PHP, но я все равно не одобряю этот синтаксис , так как ему не хватает выразительности.
Вот краткое объяснение того, почему этот синтаксис работает:
Булевы выражения в PHP имеют вид:
left_expression BOOLEAN_OPERATOR right_expression;
, где BOOLEAN_OPERATOR
- логический оператор , например , ||
.
Поскольку выражения OR имеют значение true, как только один из их операндов оценивается в true
, интерпретатор PHP может прекратить вычисление, как только он обнаружит операнд, который оценивается в true
.
В этом случае, если defined('APPLICATION_PATH')
имеет значение true, define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'))
не будет оцениваться. Если defined('APPLICATION_PATH')
оценивается как false, PHP должен оценить define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'))
.
Так что всякий раз,
- левое выражение оценивается как ложное, правое вычисляется.
- левое выражение оценивается как true, правое не оценивается.