Domanda
Con questa pagina di prova:
$page = (int) $_GET['page'] ?: '1';
echo $page;
Non capisco l'uscita sto ottenendo quando la pagina non è definito:
Request Result
?page=2 2
?page=3 3
?page= 1
? error: Undefined index page
Perché il messaggio di errore? E 'PHP 5.3; perché non è vero echo "1"?
Soluzione
Il modo corretto (a mio parere) potrebbe essere:
$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;
Anche se è stato utilizzato il nuovo stile, si dovrebbe avere problemi con ?page=0
(come 0
è risultata falsa). "Nuovo" non è sempre meglio ... dovete sapere quando di usarlo.
Altri suggerimenti
Purtroppo, non è possibile utilizzarlo per lo scopo che desideri utilizzare per:
Espressione expr1:? Rendimenti expr3 expr1 se Calcola Espr1 su True e expr3 altrimenti.
Quindi dovrete ancora utilizzare isset o svuotare () - l'operatore ?:
non include un controllo isset. Quello che è necessario utilizzare è:
$page = !empty($_GET['page']) ? (int)$_GET['page'] : 1;
Solo per completezza, un altro modo per raggiungerlo è quello di tirare operatore di rango:
$page = (int)$_GET["page"] or $page = 1;
Molte persone percepiscono questo come illeggibile però, anche se è più breve di isset () costrutti.
In alternativa, se si utilizza oggetti di input o di qualsiasi altra classe di utilità:
$page = $_GET->int->default("page", 1);
È perché si sta cercando di typecast qualcosa che è undefined: (int) $ _GET [ 'pagina']
Rimuovere la (int) o impostare il typecast dopo la linea condizionale.
Se troppo grosso è la vostra preoccupazione, come su di una funzione di supporto?
function get_or($index, $default) {
return isset($_GET[$index]) ? $_GET[$index] : $default;
}
allora si può solo utilizzare:
$page = get_or('page', 1);
che è i valori pulito e maniglie undefined.