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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top