_get - get php url
isset PHP isset($_GET[''algo''])? $_GET[''algo'']: '''' (8)
Estoy buscando expandir mi conocimiento de PHP, y encontré algo que no estoy seguro de qué es o cómo buscarlo. Estoy mirando el código de emisión php.net, y veo isset($_GET[''something'']) ? $_GET[''something''] : ''''
isset($_GET[''something'']) ? $_GET[''something''] : ''''
Entiendo las operaciones normales de emisión, como if(isset($_GET[''something'']){ If something is exists, then it is set and we will do something }
pero no entiendo el?, Repitiendo el comando get nuevamente, el: o el ''''. ¿Puede alguien ayudarme a descomponerlo o, al menos, señalarme la dirección correcta?
? se llama operador ternario (condicional): example
Desde PHP 7 puedes escribirlo aún más corto:
$age = $_GET[''age'']) ?? 27;
Y esto significa que si se proporciona age param en la url, se establecerá en $age
var o se establecerá de forma predeterminada en 27
Ver todas las novedades de php 7.
Eso se llama un operador ternario y se usa principalmente en lugar de una sentencia if-else.
En el ejemplo que dio, se puede usar para recuperar un valor de una matriz.
isset($_GET[''something'']) ? $_GET[''something''] : ''''
es equivalente a
if (isset($_GET[''something''])) {
$_GET[''something''];
} else {
'''';
}
Por supuesto, no sirve de mucho a menos que lo asigne a algo, y posiblemente incluso asigne un valor predeterminado para un valor enviado por el usuario.
$username = isset($_GET[''username'']) ? $_GET[''username''] : ''anonymous''
Has encontrado al operador ternario . Su propósito es el de una declaración básica if-else. Las siguientes piezas de código hacen lo mismo.
Ternario:
$something = isset($_GET[''something'']) ? $_GET[''something''] : "failed";
Si-si no:
if (isset($_GET[''something''])) {
$something = $_GET[''something''];
} else {
$something = "failed";
}
Lo que está viendo se llama operador ternario , y puede encontrar la implementación de PHP aquí . Es una declaración if else
.
if (isset($_GET[''something'']) == true) {
thing = isset($_GET[''something'']);
} else {
thing = "";
}
Se le conoce comúnmente como ''taquigrafía'' o el operador ternario .
$test = isset($_GET[''something'']) ? $_GET[''something''] : '''';
medio
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 :)
Se llama el operador ternario. Es taquigrafía para un bloque if-else. Vea aquí un ejemplo http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary
Si desea una cadena predeterminada por defecto, entonces una de las formas preferidas es una de estas (según su necesidad):
$str_value = strval($_GET[''something'']);
$trimmed_value = trim($_GET[''something'']);
$int_value = intval($_GET[''somenumber'']);
Si el parámetro url something
no existe en la url, entonces $_GET[''something'']
devolverá null
strval($_GET[''something''])
-> strval(null)
-> ""
y su variable $value
se establece en una cadena vacía.
-
trim()
puedestrval()
astrval()
dependiendo del código (por ejemplo, un parámetro Name podría querer usarlo) -
intval()
si solo se esperan valores numéricos y el valor predeterminado es cero.intval(null)
->0
Casos a considerar:
...&something=value1&key2=value2
(típico)
...&key2=value2
(el parámetro que falta en url $ _GET devolverá nulo para él)
...&something=+++&key2=value
(el parámetro es " "
)
Por qué este es un enfoque preferido:
- Encaja perfectamente en una línea y es claro lo que está pasando.
- Es legible que
$value = isset($_GET[''something'']) ? $_GET[''something''] : '''';
$value = isset($_GET[''something'']) ? $_GET[''something''] : '''';
- Menor riesgo de error de copiar / pegar o un error tipográfico:
$value=isset($_GET[''something''])?$_GET[''somthing'']:'''';
- Es compatible con php más antiguo y más nuevo.
El modo de actualización estricta puede requerir algo como esto:
$str_value = strval(@$_GET[''something'']);
$trimmed_value = trim(@$_GET[''something'']);
$int_value = intval(@$_GET[''somenumber'']);