Istruzioni condizionali in linea con l'operatore ternario

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
27
Roma
alessandro1997.netsons.org
Ho notato in alcuni script delle istruzioni simili a questa:
PHP:
if (!isset($_SESSION)) {
    session_start();
}
Tralasciando il fatto che in uno script che si rispetti session_start() dovrebbe essere chiamato una sola volta nel front controller, le tre righe possono essere ridotte a una così:
PHP:
isset($_SESSION) ?: session_start();
Come sapete l'operatore ternario è un if/else in linea, dunque questa istruzione:
PHP:
$foo = 'foo';
$bar = $foo == 'foo' ? 'bar' : 'baz';
Equivale a questa:
PHP:
$foo = 'foo';
if ($foo == 'foo') {
    $bar = 'bar';
} else {
    $bar = 'baz';
}
Quello che succede con il nostro codice precedente, dunque, è questo:
PHP:
if (isset($_SESSION)) {
} else {
    session_start();
}
 
Lo dava anche a me tempo fa quel problema borgo.
Premettendo che non ricordo come avevo risolto, potresti invertire la condizione mettendo '!' e quindi passando session_start() subito dopo '?'.
PHP:
<?php 
!isset($_SESSION) ? session_start();
?>
Se da errore anche in questo modo non so come aiutarti.
 
Ultima modifica:
ciao
piccola osservazione: perchè usare il ternario quando è più lento della sintassi normale
1°)
PHP:
<?php
$a=800;
$t_i=microtime();
$b=$a<1000 ? 1000-$a : $a-1000;
$t_f=microtime();
$delta=$t_f-$t_i;
echo "tempo impiegato = $delta<br>";
$t_i=microtime();
if($a<1000){$b=1000-$a;}else{$b=$a-1000;}
$t_f=microtime();
$delta=$t_f-$t_i;
echo "tempo impiegato = $delta<br>";
?>
tempo impiegato = 4.8E-5
tempo impiegato = 1.2E-5
2°)
portando per verifica sull'altro ramo mettendo $a=1800
tempo impiegato = 5.2E-5
tempo impiegato = 1.2E-5
 
ciao
versione 5.2.3

Anziano lo sviluppatore, anziana la release...:faraone:

Il ternario ha i suoi svantaggi, oltre alle prestazioni segnalate da Borgo vi è il problema delle condizionali ramificate che con il ternario risultano praticamente illeggibili.
Rendono invece il codice più snello e leggibile in caso di condizioni singole come indicato da Alex.
 
Ultima modifica:
ciao
Anziano lo sviluppatore, anziana la release...:faraone:

Il ternario ha i suoi svantaggi, oltre alle prestazioni segnalate da Borgo vi è il problema delle condizionali ramificate che con il ternario risultano praticamente illeggibili.
Rendono invece il codice più snello e leggibile in caso di condizioni singole come indicato da Alex.
sarà che tutte le volte che seto parlare di versioni mi vengono in mente tutti i "soldoni sonanti" che ho dovuto sborsare nel corso della mia cariera lavorativa (non sembra, ma qualcosina ho fatto) ad ogni cambio di versione. sia effettivi (costo degli aggiornamenti) che nascosti (costi di istruzione "il tempo è denaro") mi si rizzano i (pochi) capelli sulla testa
 
ciao
sarà che tutte le volte che seto parlare di versioni mi vengono in mente tutti i "soldoni sonanti" che ho dovuto sborsare nel corso della mia cariera lavorativa (non sembra, ma qualcosina ho fatto) ad ogni cambio di versione. sia effettivi (costo degli aggiornamenti) che nascosti (costi di istruzione "il tempo è denaro") mi si rizzano i (pochi) capelli sulla testa
Si ma almeno PHP si può aggiornare a scrocco, prenditi la tua piccola vendetta no? Fallo per i tuoi capelli..
 
Non sapevo borgo fosse anziano :) e come si dice dalle mie parti:
"quannu è francu uncime tuttu".
Sono leccese, si vede?
Traduzione letterale: 'quando è gratis sporcami tutto'.
 

Discussioni simili