Да. Однако он основан на the way PHP implements boolean evaluation и не должен рассматриваться как идиоматическая конструкция. Это почти наверняка будет работать в будущих выпусках PHP, но я бы все же отменил этот синтаксис, поскольку ему не хватает выразительности.
Вот краткое объяснение о том, почему этот синтаксис работает:
булевы выражения в PHP имеют вид:
left_expression BOOLEAN_OPERATOR right_expression;
где BOOLEAN_OPERATOR
является logical operator, ||
, например.
Поскольку выражения OR вычисляются как истинные, как только один из их операндов оценивается в 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, право не оценивается.
Это первый раз, когда я вижу этот синтаксис. – Shoe