Pergunta
Com esta página de teste:
$page = (int) $_GET['page'] ?: '1';
echo $page;
Não entendo a saída que estou recebendo quando a página é indefinida:
Request Result
?page=2 2
?page=3 3
?page= 1
? error: Undefined index page
Por que a mensagem de erro? É Php 5.3; Por que não ecoa "1"?
Solução
A maneira correta (na minha opinião) seria:
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
Mesmo se você usasse o novo estilo, você teria problemas com ?page=0
(Como 0
avaliado como falso). "Novo" nem sempre é melhor ... você tem que saber quando para usá-lo.
Outras dicas
Infelizmente, você não pode usá -lo para o propósito que gostaria de usá -lo:
Expressão expr1?: Expr3 retorna expr1 se o expr1 avaliar para true e expr3 caso contrário.
Então você ainda terá que usar isset ou vazio () - o ?:
O operador não inclui uma verificação do ISSET. O que você precisa usar é:
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
Apenas por completude, outra maneira de alcançá -lo é puxar a classificação do operador:
$page = (int)$_GET["page"] or $page = 1;
Muitas pessoas percebem isso como ilegível, embora seja mais curto que as construções ISSET ().
Ou se você estiver usando objetos de entrada ou qualquer outra classe de utilitário:
$page = $_GET->int->default("page", 1);
É porque você está tentando digitar algo que está indefinido: (int) $ _get ['página'
Remova o (int) ou defina o TypeCast após a linha condicional.
Se Bloat é sua preocupação, que tal uma função auxiliar?
function get_or($index, $default) {
return isset($_GET[$index]) ? $_GET[$index] : $default;
}
Então você pode apenas usar:
$page = get_or('page', 1);
que é limpo e lida com valores indefinidos.