En utilisant PHP 5.3: opérateur
Question
Avec cette page de test:
$page = (int) $_GET['page'] ?: '1';
echo $page;
Je ne comprends pas la sortie que je reçois lorsque la page est définie:
Request Result
?page=2 2
?page=3 3
?page= 1
? error: Undefined index page
Pourquoi le message d'erreur? Il est PHP 5.3; pourquoi ne pas echo "1"?
La solution
La bonne façon (à mon avis) serait:
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
Même si vous avez utilisé le nouveau style, vous avez des problèmes avec ?page=0
(comme 0
évalué à false). "Nouveau" est pas toujours mieux ... vous devez savoir quand pour l'utiliser.
Autres conseils
Malheureusement, vous ne pouvez pas l'utiliser pour le but que vous souhaitez utiliser pour:
L'expression expr1: retourne Expr3 expr1 si expr1 TRUE et expr3 autrement.
Vous aurez encore à utiliser isset ou vide () - l'opérateur ?:
ne comprend pas un contrôle isset. Ce que vous devez utiliser est:
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
Juste pour être complet, une autre façon d'y parvenir est de tirer le rang de l'opérateur:
$page = (int)$_GET["page"] or $page = 1;
Beaucoup de gens perçoivent cela comme illisible cependant, si elle est plus courte que isset () construit.
Ou si vous utilisez des objets d'entrée ou de toute autre classe utilitaire:
$page = $_GET->int->default("page", 1);
Il est parce que vous essayez de typer quelque chose qui est non défini: (int) $ _GET [ 'page']
Supprimer le (int) ou définir le transtypage après la ligne conditionnelle.
Si ballonnement est votre préoccupation, que diriez-vous d'une fonction d'aide?
function get_or($index, $default) {
return isset($_GET[$index]) ? $_GET[$index] : $default;
}
vous pouvez simplement utiliser:
$page = get_or('page', 1);
qui est propre et gère les valeurs non définies.