Foros del Web » Programando para Internet » PHP »

No entiendo esta linea de codigo

Estas en el tema de No entiendo esta linea de codigo en el foro de PHP en Foros del Web. Hola compañeros, estoy trabajando sobre el codigo de otro programador y hay varias cosas que no entiendo ya que el es mas avanzado que yo... ...
  #1 (permalink)  
Antiguo 02/07/2013, 04:02
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 10 meses
Puntos: 5
No entiendo esta linea de codigo

Hola compañeros, estoy trabajando sobre el codigo de otro programador y hay varias cosas que no entiendo ya que el es mas avanzado que yo...

$pageLang = isset($_GET['lang']) ? $_GET['lang'] : 'es';


Que quiere decir el ? y los :

Disculpen mi poca experiencia
  #2 (permalink)  
Antiguo 02/07/2013, 04:11
Avatar de pzin
Moderata 😈
 
Fecha de Ingreso: julio-2002
Ubicación: Islas Canarias
Mensajes: 10.488
Antigüedad: 21 años, 8 meses
Puntos: 2114
Respuesta: No entiendo esta linea de codigo

Es un shorhand para if o inline if.

Es como si hicieras:

Código PHP:
Ver original
  1. if(isset($_GET['lang'])) {
  2.   $pageLang = $_GET['lang'];
  3. } else {
  4.   $pageLang = 'es';
  5. }
  #3 (permalink)  
Antiguo 02/07/2013, 05:40
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: No entiendo esta linea de codigo

Eso es una asignación ternaria, y ? : se llaman, en conjunto, operador ternario; funciona sólo en asignaciones, ya sea a variables o a salida en pantalla. No puedes usar solo el signo de interrogación o los dos puntos, ambos son obligatorios.

Como bien dice pzin, te ayuda a reducir un poco tu código y mantenerlo legible; lo que sigue al signo de interrogación es lo que en un if corresponde al then y lo que viene después de los dos puntos corresponde al else.
__________________
- León, Guanajuato
- GV-Foto
  #4 (permalink)  
Antiguo 02/07/2013, 09:28
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: No entiendo esta linea de codigo

Ojo con las asignaciones ternarias pues simplifican lo simple y complican lo complicado


Corolario: deben usarse en condiciones simples de partes de tu codigo que implementaras siempre igual como chequear que una variable de session o un GET / POST no este vacia, otro ejemplo:


// vas a procesar unos checkbox que "estarian" en $_GET['options']

$checked = (isset($_GET['options']) ? $_GET['options'] : null);
__________________
Salu2!
  #5 (permalink)  
Antiguo 02/07/2013, 12:08
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 8 meses
Puntos: 194
Respuesta: No entiendo esta linea de codigo

Cita:
Iniciado por Italico76 Ver Mensaje
Ojo con las asignaciones ternarias pues simplifican lo simple y complican lo complicado


Corolario: deben usarse en condiciones simples de partes de tu codigo que implementaras siempre igual como chequear que una variable de session o un GET / POST no este vacia, otro ejemplo:


// vas a procesar unos checkbox que "estarian" en $_GET['options']

$checked = (isset($_GET['options']) ? $_GET['options'] : null);
Básicamente desde mi experiencia, el operador ternario sirve muy bien para cargar variables procedentes de, sesion, post o get. En esos casos es realmente útil.
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #6 (permalink)  
Antiguo 02/07/2013, 12:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: No entiendo esta linea de codigo

También como apunte, ahora PHP soporta que el primer operador sea opcional, es decir:

Código PHP:
Ver original
  1. $action = (empty($_POST['foo'])) ? 'default' : $_POST['foo'];
  2. // PHP5.3+
  3. $action = ($_POST['foo']) ?: 'default';
  #7 (permalink)  
Antiguo 02/07/2013, 12:31
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: No entiendo esta linea de codigo

Cita:
Iniciado por GatorV Ver Mensaje
También como apunte, ahora PHP soporta que el primer operador sea opcional, es decir:

Código PHP:
Ver original
  1. $action = (empty($_POST['foo'])) ? 'default' : $_POST['foo'];
  2. // PHP5.3+
  3. $action = ($_POST['foo']) ?: 'default';
Buen aporte pero elegistes un mal caso porque preciso pusistes una variable (indice) que puede ser 'undefined'

Código PHP:
<?php
$action 
= ($foo) ?: 'default';

if (
$foo==null)
   
$action 'default';
else
   
$action $foo;
Ahi creeria que queda mas claro

PD: no conocia esa nueva sintaxis........GRACIAS!
__________________
Salu2!
  #8 (permalink)  
Antiguo 02/07/2013, 13:20
Avatar de thedaket  
Fecha de Ingreso: junio-2011
Mensajes: 55
Antigüedad: 12 años, 9 meses
Puntos: 3
Respuesta: No entiendo esta linea de codigo

Pues básicamente es una condición como if en otro tipo de sintaxis, pero su uso no es muy común ya que no permite hacer grandes procesos tras el if o else, yo la uso frecuentemente en funciones por ejemplo:

Código PHP:
Ver original
  1. function ejeplo($uno,$dos){
  2.       return $uno>=$dos ? 'si' : 'no';
  3. }

y bueno te recomiendo el manual de PHP, y veras otras alternativas a las clásicas llaves como

if(condicion):

else:

endif;
__________________
Sí AJAX quieres usar jQuery debes agregar...
  #9 (permalink)  
Antiguo 02/07/2013, 13:29
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 2 meses
Puntos: 288
Respuesta: No entiendo esta linea de codigo

Cita:
Iniciado por Italico76 Ver Mensaje
Buen aporte pero elegistes un mal caso porque preciso pusistes una variable (indice) que puede ser 'undefined'

Código PHP:
<?php
$action 
= ($foo) ?: 'default';

if (
$foo==null)
   
$action 'default';
else
   
$action $foo;
Ahi creeria que queda mas claro

PD: no conocia esa nueva sintaxis........GRACIAS!
esto empeora las cosas, hacer un if corto para luego hacer un if largo??
  #10 (permalink)  
Antiguo 02/07/2013, 17:55
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Respuesta: No entiendo esta linea de codigo

Cita:
Iniciado por Patriarka Ver Mensaje
esto empeora las cosas, hacer un if corto para luego hacer un if largo??
Ud entendio que era un IF o el OTRO ?
__________________
Salu2!
  #11 (permalink)  
Antiguo 03/07/2013, 03:57
Avatar de Benderzuelo  
Fecha de Ingreso: mayo-2013
Ubicación: España
Mensajes: 223
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: No entiendo esta linea de codigo

Ok chicos, muchismas gracias me a quedado muy claro... todo muy bien y muy claro..


:a rriba:

Etiquetas: Ninguno
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 16:39.