Pregunta
Con esta página de prueba:
$page = (int) $_GET['page'] ?: '1';
echo $page;
No entiendo la salida me estoy haciendo cuando no está definida la página:
Request Result
?page=2 2
?page=3 3
?page= 1
? error: Undefined index page
¿Por qué el mensaje de error? Es PHP 5.3; ¿Por qué no echo "1"?
Solución
La forma correcta (en mi opinión) sería:
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
Incluso si ha utilizado el nuevo estilo, que tendría problemas con ?page=0
(como 0
evalúa a falso). "Nuevo" no es siempre mejor ... usted tiene que saber cuando para utilizarlo.
Otros consejos
Por desgracia no se puede utilizar con el propósito desea utilizarlo para:
La expresión expr1:? Rendimientos expr3 EXPR1 If se evalúa como TRUE, EXPR1 y expr3 de otra manera.
Así que todavía tendrá que utilizar isset o vaciar () - el operador ?:
no incluir un cheque isset. Lo que hay que utilizar es:
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
Sólo por completo, otra forma de lograrlo es tirar rango operador:
$page = (int)$_GET["page"] or $page = 1;
Muchas personas perciben esto como ilegible sin embargo, aunque es más corto que isset () construcciones.
O si usted está usando objetos de entrada o cualquier otra clase de utilidad:
$page = $_GET->int->default("page", 1);
Es porque usted está tratando de encasillado algo que está indefinido: (int) $ _GET [ 'page']
Eliminar el (int) o establecer el encasillado después de la línea condicional.
Si la hinchazón es su preocupación, ¿qué tal una función de ayuda?
function get_or($index, $default) {
return isset($_GET[$index]) ? $_GET[$index] : $default;
}
a continuación, puedes utilizar:
$page = get_or('page', 1);
Los valores que es limpio y mangos indefinido.