2010-08-18 12 views
7

Come dovrebbe la seguente espressione booleana essere scritto in PHP:Come dovrebbero essere scritte le espressioni booleane in PHP?

$foo = ""; 
if($var==TRUE){ 
    $foo = "bar"; 
} 

o

if($var==TRUE){ 
    $foo = "bar"; 
}else{ 
    $foo = ""; 
} 

o

$foo = ($var==TRUE) ? "bar": ""; 
+0

Grazie George, l'ho pubblicato alle 16.55 appena prima di lasciare il lavoro, avrei potuto rendere più chiaro il titolo e la frase di apertura con il senno di poi. :) – Stann0rz

risposta

8

Prima di tutto, true non è una costante, si tratta di un segno, quindi per favore non maiuscolo esso (so che alcune norme farlo, ma penso che confonde il significato) ...

In secondo luogo, non è necessario il confronto ridondante $var == true all'interno dello if. È esattamente lo stesso di if ($var) { (Per un confronto doppio ==. Un confronto identico === dovrebbe essere esplicito).

In terzo luogo, preferisco la preinizializzazione. Quindi:

$foo = ''; 
if ($var) { 
    $foo = 'one status'; 
} else { 
    $foo = 'another status'; 
} 

Se non è necessario il ramo else, è sufficiente rimuoverlo. Preferisco la preinizializzazione poiché obbliga a inizializzare la variabile e previene i casi in cui si dimentica di inizializzarla in uno dei rami. Inoltre, ti dà un suggerimento quando torni a leggere la funzione più tardi ...

E per un ramo semplice come quello, l'uso della sintassi ternaria va bene. Se c'è più logica complessa, mi piacerebbe stare lontano però:

$foo = $var ? 'bar' : ''; 
+0

Per essere onesti, i codici di cui sopra non forniscono alcuna relazione su cosa sto lavorando attualmente ed è stato qualcosa che ho messo a tacere in pochi secondi per porre la domanda più chiara, i valori booleani sembravano più logici di confronto tra stringhe o interi. La preinizializzazione è qualcosa che ho sempre fatto, ma non sono mai stato 'insegnato' in PHP o in qualsiasi lingua e mi sono chiesto se esistesse una buona pratica per questo. Grazie per il consiglio ircmaxell. – Stann0rz

5

Tutti coloro lavoro. È una preferenza. Prenderò in considerazione l'inizializzazione della variabile come prima nel primo esempio. Ma per qualcosa di così semplice, la terza opzione va bene nel mio libro.

Inoltre, il 3 ° non deve essere così verbose se $ var è solo un valore booleano:

$foo = $var ? "bar" : ""; 
+3

A meno che non stiano specificatamente cercando il vero, allora vorrete usare $ pippo = ($ var === VERO)? "bar": ""; – Codeacula

1

mi piace la prima:

$foo = ""; 
if($var==TRUE){ 
    $foo = "bar"; 
} 

Dal momento che è chiaro, conciso e facile da leggere.

0

Non importa molto. Mi piace il primo quando c'è un sacco di elseif in modo che tu sappia che la variabile è sempre inizializzata. Ma è davvero solo una questione di preferenza.

Come le virgolette, mi piace usare quelle singole in php. Nessuna buona ragione :)

+0

Oh e il terzo potrebbe essere altrettanto facilmente $ foo = $ var? 'bar': ''; –

+0

Tendo a utilizzare un insieme di virgolette a seconda di cosa sto trasmettendo in quel momento, le stringhe HTML tendono a essere generate utilizzando le virgolette singole, mentre credo che le doppie virgolette siano l'unico modo per generare un nuovo feed di riga? - "\ r \ n" – Stann0rz

0

La risposta giusta, come è spesso il caso è "dipende". In questo caso,

if ($var==TRUE) $foo = "bar"; 
else $foo = ""; 

è molto chiaro. Ma qual è il tuo contesto?

In generale, l'operatore terziario, la terza opzione, deve essere utilizzata con estrema cautela, poiché diventa molto difficile da leggere.

Ma pensa in termini di ciò che vuoi che il tuo codice MEAN, più di quello che fa. Vuoi impostare il tuo $ foo su un valore "normale" e poi sostituirlo? O vuoi impostare qualcosa che dipende da cosa è $ var?

Qualcosa che trovo utile per cambiare, che non è direttamente quello che chiedi, ma che è simile, è questo, da

function func() { 
    ... 
    if ($condition) { 
     do plenty 
     of things 
    } 
    else { 
     do plenty 
     of things 
    } 
} 

Che, io in genere piace cambiare a:

function func() { 
    ... 
    if ($condition) { 
     do plenty 
     of things 
     return; 
    } 
    do plenty 
    of things 
} 

Generalmente ha senso.

Basta chiedersi: "Se qualcuno che non sapeva nulla del mio codice lo leggesse, avrebbe senso per lui? O per lei?"

1

Preferisco il primo (eccetto per il test ridondante per il booleano) perché funziona in modo coerente tra le lingue, in particolare quelle che richiedono di dichiarare la variabile (e magari la tipizzano) prima di impostarla.
Java:

String foo = ""; 
if (var) { 
    foo = "Something"; 
} 

JavaScript o JavaFX:

var foo = ""; 
if (var) { 
    foo = "Something"; 
} 

Ecc
si può usare il terzo modulo di troppo, ma se la condizione (o assegnazione) è complesso, è un po 'meno leggibile .

Problemi correlati