Sí. Sin embargo, está basado en the way PHP implements boolean evaluation y no debe considerarse una construcción idiomática. Es casi seguro que funcionará en futuras versiones de PHP, pero aún así desalentaría esta sintaxis ya que carece de expresividad.
He aquí una breve explicación sobre por qué funciona esta sintaxis:
expresiones booleanas en PHP tienen la forma:
left_expression BOOLEAN_OPERATOR right_expression;
donde BOOLEAN_OPERATOR
es una logical operator, ||
por ejemplo.
Dado que las expresiones OR se evalúan como verdaderas tan pronto como uno de sus operandos evalúe como true
, el intérprete PHP puede dejar de evaluar tan pronto como encuentre un operando que evalúe como true
.
En este caso si defined('APPLICATION_PATH')
se evalúa como verdadero, define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'))
no será evaluado. Si defined('APPLICATION_PATH')
se evalúa como falso, PHP debe evaluar define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'))
.
Así que cuando,
- la expresión se evalúa como falsa izquierda, se evalúa la derecha.
- la expresión izquierda se evalúa como verdadera, la derecha no se evalúa.
Esta es la primera vez que veo esta sintaxis. – Shoe