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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top