2015-03-31 13 views
9

È possibile utilizzare l'operatore ternario in PHP senza la dichiarazione di chiusura 'else'? L'ho provato e restituisce errori. La ricerca su Google non sta producendo nulla, quindi penso che la risposta sia probabilmente no. Volevo solo ricontrollare qui. Ad esempio:Utilizzo dell'operatore Ternario senza l'istruzione Else PHP

if (isset($testing) { 
    $new_variable = $testing; 
} 

Imposterà solo $ nuova_variabile se $ testing esiste. Ora posso fare

$new_variable = (isset($testing) ? $testing : ""); 

ma che restituisce una variabile vuota per $ new_variable se $ test non è impostato. Non voglio una variabile vuota se non è impostata, voglio che la variabile $ new_ non venga creata.

ho cercato

$new_variable = (isset($testing) ? $testing); 

e restituito errori. Ho anche provato

$new_variable = (isset($testing) ? $testing :); 

e ha anche restituito errori. C'è un modo per usare l'Operatore Ternario senza la dichiarazione allegata, o sono bloccato a scriverlo a mano lunga?

MODIFICA: seguendo il consiglio di Rizier123, ho provato a impostare la parte "else" dell'equazione su NULL, ma continua ad aggiungere una chiave a un array. Il valore non è lì, ma la chiave è, che rovina i miei piani. Per favore mi permetta di spiegare ulteriormente.

Il codice prenderà un po 'di $ _POST variabili da un modulo e li userà per i parametri in un stdClass che viene poi utilizzato per le chiamate al metodo API. Alcune variabili del modulo non esistono, poiché vengono tutte applicate alla stessa variabile per la chiamata API, ma l'utente può selezionarne solo una. Ad esempio, è possibile selezionare 3 voci, a prescindere dall'oggetto selezionato che viene passato a stdClass e gli altri 2 non esistono.

ho provato questo:

$yes_this_test = "IDK"; 
$setforsure = "for sure"; 
$list = new stdClass; 
$list->DefinitelySet = $setforsure; 
$list->MaybeSet = (isset($yes_this_test) ? $yes_this_test : NULL); 
$list->MaybeSet = (isset($testing) ? $testing : NULL); 
print_r($list); 

Ma ovviamente MaybeSet viene impostato su NULL perché (isset ($ test) viene dopo (isset ($ yes_this_test) e restituisce

stdClass Object ([DefinitelySet] => for sure [MaybeSet] =>) 

ho vinto' so che ordine arrivano le variabili $ _POST, quindi non posso strutturarlo in modo tale da assicurarmi che l'elenco venga elaborato nell'ordine corretto

Ora so che posso fare qualcosa come

if (isset($yes_this_test) { 
    $list->MaybeSet = $yes_this_test; 
} 
elseif (isset($testing)) { 
    $list->MaybeSet = $testing; 
} 

Ma speravo che esistesse una scorciatoia per questo tipo di logica, dato che devo scriverne dozzine. Esiste un operatore simile all'operatore Ternario utilizzato per le istruzioni if ​​/ elseif?

+1

Un'altra opzione consiste nell'utilizzare l'istruzione if senza le parentesi graffe. Potrebbe essere su una riga simile a un ternario pure. 'if (isset ($ testing)) $ new_variable = $ testing;'. IMO Non mi piace se senza parentesi graffe ma solo dicendo che è possibile. IMO sarebbe meglio impostarlo su NULL come suggerisce Rizier perché isset restituirà false se il valore è NULL. 'isset ($ nullVar)' restituirà false. –

+0

Possibile duplicato di [Operatori ternari. È possibile un'azione su un solo lato?] (Http://stackoverflow.com/questions/14520949/ternary-operators-possible-for-a-site-sided-action) –

risposta

4

Basta impostare a NULL in questo modo:

$new_variable = (isset($testing) ? $testing : NULL); 

La si sarebbe variabile return false con un assegno isset().

Ulteriori informazioni su NULL sono disponibili nel manuale.

E una citazione da lì:

La speciale valore NULL rappresenta una variabile con nessun valore. NULL è l'unico valore possibile di tipo null.

Una variabile è considerato null se:

  • è stato assegnato costante NULL.
  • ha non è stato impostato su alcun valore ancora.
  • è stato disinserito().
+0

Perfetto! Grazie. Ho sempre pensato che NULL fosse praticamente lo stesso di vuoto. Suppongo che dovrei assumere meno e leggere di più. ;) – Longblog

+0

@Longblog Prego! Buona giornata: D – Rizier123

+1

Bah, in realtà dopo averlo testato proprio ora, aggiunge la variabile a una lista, proprio come una variabile vuota. Non so se funzionerà perché dovrò usarlo per una serie di parametri usando le variabili $ _POST come parametri. Non so in quale ordine verranno trasmesse le variabili $ _POST, quindi potrei finire con un parametro NULL, anche se è impostata una delle variabili $ _POST. Spiegherò ulteriormente sopra. – Longblog

10

Since PHP 5.3 si può fare questo:

!isset($testing) ?: $new_variable = $testing;

Come si può vedere, si utilizza solo la parte se la condizione è falsa , in modo da avere per negare l'espressione isset.