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"?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top