Con questa pagina di prova:
$page = (int) $_GET['page'] ?: '1'; echo $page;
Non capisco l'output che ottengo quando la pagina non è definita:
Request Result ?page=2 2 ?page=3 3 ?page= 1 ? error: Undefined index page
Perché il messaggio di errore? È PHP 5.3; perché non riecheggia "1"?
Il modo corretto (secondo me) sarebbe:
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
Anche se hai usato il nuovo stile, avresti problemi con ?page=0
(come 0
valutato come falso). "Nuovo" non è sempre meglio … devi sapere quando usarlo.
Purtroppo non puoi usarlo per lo scopo che vorresti usare per:
Espressione expr1?: Expr3 restituisce expr1 se expr1 restituisce TRUE ed expr3 in caso contrario.
Quindi dovrai ancora usare isset o empty () – l'operatore ?:
Non include un controllo isset. Quello che devi usare è:
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
Solo per completezza, un altro modo per ottenerlo è tirare il rank dell'operatore:
$page = (int)$_GET["page"] or $page = 1;
Molte persone tuttavia lo percepiscono come illeggibile, sebbene sia più corto dei costrutti isset ().
O se si stanno utilizzando oggetti di input o qualsiasi altra class di utilità:
$page = $_GET->int->default("page", 1);
È perché stai provando a digitare qualcosa che non è definito: (int) $ _GET ['page']
Rimuovi (int) o imposta il typecast dopo la row condizionale.
Se sei preoccupato, cosa ne pensi di una function di aiuto?
function get_or($index, $default) { return isset($_GET[$index]) ? $_GET[$index] : $default; }
allora puoi semplicemente usare:
$page = get_or('page', 1);
che è pulito e gestisce valori indefiniti.