Ver Mensaje Individual
  #272 (permalink)  
Antiguo 21/04/2011, 20:23
Avatar de Triby
Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 9 meses
Puntos: 2237
Respuesta: Juego: "¿Dónde está el error?"

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.

Código PHP:
Ver original
  1. ( ! defined('CONSTANTE') && $str = 'No definida');

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
  1. $obj = false;
  2.  
  3. // La forma tradicional:
  4. if($obj === false) {
  5.     $obj = new clase();
  6. }
  7.  
  8. // La forma solo con evaluaciones:
  9. ($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.
__________________
- León, Guanajuato
- GV-Foto

Última edición por Triby; 21/04/2011 a las 20:31