Utilizzando PHP 5.3?: Operatore

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.