Foros del Web » Programando para Internet » PHP »

Lógica del operador en linea :?

Estas en el tema de Lógica del operador en linea :? en el foro de PHP en Foros del Web. Hola gente, en la web entre un código que puso un programador (que detesta php) como ejemplo de cosas incosistntes que tiene el lenguaje, el ...
  #1 (permalink)  
Antiguo 06/11/2013, 17:10
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Lógica del operador en linea :?

Hola gente, en la web entre un código que puso un programador (que detesta php) como ejemplo de cosas incosistntes que tiene el lenguaje, el codigo es este:

Código PHP:
Ver original
  1. $arg = 'T';
  2. $vehicle = ( ( $arg == 'B' ) ? 'bus' :
  3. ( $arg == 'A' ) ? 'airplane' :
  4. ( $arg == 'T' ) ? 'train' :
  5. ( $arg == 'C' ) ? 'car' :
  6. ( $arg == 'H' ) ? 'horse' :
  7. 'feet');
  8. echo $vehicle
  9. //imprime horse.

Lo probe y efectivamente ese es el resultado.

Hace 20 minutos que me estoy rompiendo la cabeza intentando darme cuenta de que operacion es la que hace php para obtener ese resultado.

El autor del sript menciona que es "asociativo a izquierda". ¿alguien que lo entienda me lo podria explicar?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 06/11/2013, 17:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Lógica del operador en linea :?

Te doy un ejemplo breve:

Código PHP:
Ver original
  1. // versión larga
  2. if ($foo) {
  3.   $candy = $bar;
  4. } else {
  5.   $candy = $does;
  6. }
  7.  
  8. // versión abreviada
  9. $candy = $foo ? $bar : $does;

Si entiendes eso ya estás del otro lado, simplemente son sub-expresiones del mismo tipo de manera anidada, no más.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 06/11/2013, 19:11
Avatar de dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años
Puntos: 270
Respuesta: Lógica del operador en linea :?

Primero, la versión reducida del problema:
Código PHP:
Ver original
  1. $arg = 'T';
  2. $vehicle =
  3. ( $arg == 'T' ) ? 'train' :
  4. ( $arg == 'H' ) ? 'horse' :
  5. 'feet';
  6. echo $vehicle
Esto da como resultado horse.

Leyendo el código, puedes pensar que lo que hace PHP es esto (ojo a los paréntesis):

$vehicle = ( $arg == 'T' ) ? 'train' :(( $arg == 'H' ) ? 'horse' :'feet');

Pero no es eso lo que hace.Lo que hace es:
$vehicle =( ( $arg == 'T' ) ? 'train' :( $arg == 'H' )) ? 'horse' :'feet';

Reduciendo:
$vehicle=('train')?'horse':'feet';

$vehicle='horse';

Un bonito WTF

Última edición por dashtrash; 07/11/2013 a las 08:08
  #4 (permalink)  
Antiguo 06/11/2013, 19:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Lógica del operador en linea :?

Cita:
Iniciado por dashtrash Ver Mensaje
un bonito wtf
+1
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 07/11/2013, 05:23
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Lógica del operador en linea :?

Muchas gracias ahi lo entendi, funciona al reves que en C o Java este operador, hay que tener cuidado!
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: operador
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:35.