Qui la documentazione
* Ternary Operator php.net
* PHP Ternary Operator phptutorial.net
In sostanza è una condizione in linea.
La sintassi è questa:
codice:
condizione ? espressioneSeVero : espressioneSeFalso
Viene quindi analizzata la condizione e, in base al risultato (vero o falso), restituita la relativa espressione.
Per esteso avrei potuto scrivere:
codice:
$campi_supplementi = "
...
<option value=\"1\" ". ( $supplemento_obbligatorio == '1' ? 'selected' : '' ) .">Obbligatorio</option>
<option value=\"0\" ". ( $supplemento_obbligatorio == '0' ? 'selected' : '' ) .">Non obbligatorio</option>
...
";
ma, dal momento che PHP esegue l'auto-casting (cioè la conversione automatica del tipo di dato) la prima condizione può essere scritta in modo più stringato:
codice:
$supplemento_obbligatorio == '1' ? 'selected' : ''
// equivale a scrivere
$supplemento_obbligatorio ? 'selected' : ''
Per cui, se la condizione è verificata allora viene restituita la stringa 'selected' altrimenti viene restituita una stringa vuota ''.
Allo stesso modo posso impostare la seconda condizione, con una negazione anziché confrontare con il valore '0', oppure invertendo semplicemente i risultati:
codice:
$supplemento_obbligatorio == '0' ? 'selected' : ''
// equivale a scrivere (nota la negazione iniziale)
!$supplemento_obbligatorio ? 'selected' : ''
// oppure (senza negazione ma invertendo i risultati)
$supplemento_obbligatorio ? 'selected' : ''