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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top