2012-08-25 33 views
24

Estoy buscando expandir mi conocimiento de PHP, y encontré algo que no estoy seguro de qué se trata o cómo buscarlo. Estoy buscando en el código isset php.net, y veo isset($_GET['something']) ? $_GET['something'] : ''

entiendo operaciones Isset normales, tales como if(isset($_GET['something']){ If something is exists, then it is set and we will do something } pero no entiendo la, repitiendo el conseguir de nuevo, la:? O de la ''. ¿Alguien puede ayudarme a analizar esto o al menos señalarme en la dirección correcta?

+2

relacionados http://stackoverflow.com/questions/3737139/reference-what-does-this-symbol- mean-in-php – Musa

+1

posible duplicado de [¿Qué es el PHP? : operador llamado y ¿qué hace?] (http://stackoverflow.com/questions/1080247/what-is-the-php-operator-llamado-y-what-does-it-do) – Niko

Respuesta

50

Se conoce comúnmente como 'taquigrafía' o el Ternary Operator.

$test = isset($_GET['something']) ? $_GET['something'] : ''; 

significa

if(isset($_GET['something'])) { 
    $test = $_GET['something']; 
} else { 
    $test = ''; 
} 

Para descomponerlo:

$test = ... // assign variable 
isset(...) // test 
? ... // if test is true, do ... (equivalent to if) 
: ... // otherwise... (equivalent to else) 

O ...

// test --v 
if(isset(...)) { // if test is true, do ... (equivalent to ?) 
    $test = // assign variable 
} else { // otherwise... (equivalent to :) 
1

? se llama Operador Ternario (condicional): example

6

Se denomina operador ternario y se usa principalmente en lugar de una instrucción if-else.

En el ejemplo que diste se puede utilizar para recuperar un valor de una matriz isset dada devuelve true

isset($_GET['something']) ? $_GET['something'] : '' 

es equivalente a

if (isset($_GET['something'])) { 
    $_GET['something']; 
} else { 
    ''; 
} 

Por supuesto que no es de mucha utilidad a menos que asigne a algo, y posiblemente incluso asigne un valor predeterminado para un valor enviado por el usuario.

$username = isset($_GET['username']) ? $_GET['username'] : 'anonymous' 
4

Usted ha encontrado el ternary operator. Su propósito es el de una declaración básica de if-else. Los siguientes pedazos de código hacen lo mismo.

ternario:

$something = isset($_GET['something']) ? $_GET['something'] : "failed"; 

Si-else:

if (isset($_GET['something'])) { 
    $something = $_GET['something']; 
} else { 
    $something = "failed"; 
} 
3

De php 7 se puede escribir aún más corto:

$age = $_GET['age']) ?? 27; 

Y esto significa que si se proporciona parámetro edad en la url que se establecerá en $age var, o va por defecto a 27

Ver todos new features of php 7

1

Si desea un defecto cadena vacía a continuación de manera preferente es uno de ellos (dependiendo de su necesidad):

$str_value = strval($_GET['something']); 
$trimmed_value = trim($_GET['something']); 
$int_value = intval($_GET['somenumber']); 

Si el parámetro url somethingno existe en la url continuación $_GET['something']volverá null

strval($_GET['something']) ->strval(null) ->""

y la variable se establece en $value una cadena vacía

  • trim() podrían preferimos sobre strval() dependiendo de código (por ejemplo, un parámetro Name podría querer usarlo)
  • intval() si sólo se esperan valores numéricos y el valor predeterminado es cero. intval(null) ->0

casos a considerar:

...&something=value1&key2=value2 (típica)

...&key2=value2 (parámetro que falta a partir url $ _GET devolverá un valor nulo para ello)

...&something=+++&key2=value (parámetro es " ")

Por qué este es un preferido pproach:

  • Se ajusta perfectamente en una línea y está claro lo que está sucediendo.
  • Es fácil de leer que $value = isset($_GET['something']) ? $_GET['something'] : '';
  • Menor riesgo de copiar/pegar error o un error tipográfico: $value=isset($_GET['something'])?$_GET['somthing']:'';
  • Es compatible con la mayor y más reciente php.

actualización modo estricto puede requerir algo como esto:

$str_value = strval(@$_GET['something']); 
$trimmed_value = trim(@$_GET['something']); 
$int_value = intval(@$_GET['somenumber']); 
Cuestiones relacionadas