Sourcegeek, estas en lo correcto... casi!!!
Lo vi recientemente en el framework Fuel, lo que hace es simplemente evaluar expresiones, en lo unico que te equivocaste es en la parte de que no sirve para funciones, recuerda que defined() y define() son funciones.
Si la constante no esta definida, pasa a ejecutar y evaluar el resultado de la siguiente expresion, asignando un valor a $str. Pero si se definio la constante, entonces ya no ejecuta la siguiente y $str queda con el valor con que se declaro o como variable no definida.
echo, include, exit, require, etc. son directivas que no devuelven resultado, por tanto, no pueden ser evaluadas, aunque uses parentesis, que no son correctos ni requeridos.
Un uso de esto, puede ser para inicializar variables, definir constantes (como en los del ejemplo) e incluso, crear objetos:
Código PHP:
Ver original$obj = false;
// La forma tradicional:
if($obj === false) {
$obj = new clase();
}
// La forma solo con evaluaciones:
($obj === false && $obj = new clase());
Tu turno!
Aaronus23, el ejercicio era para dejar claro que solo expresiones que se puedan evaluar funcionan, no asi las directivas.
Edito para agregar:
Esta forma no es equivalente de
if - then (aunque el funcionamiento es muy similar), porque puedes anidar todas las expresiones que necesites y se dejaran de evaluar en cuanto una de ellas devuelva falso.