Istruzioni condizionali in linea con l'operatore ternario

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
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();
}
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
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..
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
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
Autore Titolo Forum Risposte Data
M Salvare pagine web come segnalibro con istruzioni javascript Javascript 0
M Errore di header se metto include al posto delle istruzioni PHP 2
A Istruzioni via mail PHP 8
Emix Ciclo su pulsante e istruzioni quando si preme PHP 30
Web Designer Scarica il Modello e istruzioni Unico Pf/2012 Leggi, Normative e Fisco 0
G Cambio di istruzioni Javascript 1
Nik Istruzioni multiple Classic ASP 1
N Istruzioni per file PHP 2
G [PHP] chiamate di pagine condizionali PHP 2
D javascript per select condizionali Javascript 1
A impostare una query con operatori condizionali MySQL 1
M Commenti condizionali IExplorer HTML e CSS 1
A Commenti condizionali e IE HTML e CSS 2
B commenti condizionali css HTML e CSS 5
felino Mac OS e Client Mail: Stato non in linea Mac e Software 1
P come posso fissare quella linea? HTML e CSS 3
F [Photoshop] Problema da strumento linea a freccia Photoshop 0
elpirata [PHP] Evitare la visualizzazione del carattere di nuova linea \r\n PHP 5
G Caduta Di Linea Con Powerline Reti LAN e Wireless 0
Francesco Polese Leggere linea da un file ed eliminarla PHP 2
S Come allineare tre immagini in linea al centro HTML e CSS 1
G Creazione linea animata con photoshop Photoshop 3
Emix Data diversa ogni linea di tabella PHP 2
G Io ho finito la mia prima applicazione web con MVC ed ho bisogno di metterla in linea ma non so come ASP.NET 2
D Immagini dentro textfield che restano in linea (e non vadano a capo) Flash 0
M Php+MySql: Estrarre dati da tabella e consentire all'utente di modificare un valore 'in linea' PHP 6
G Con lo strumento matita ho eseguito una linea, con Photoshop Photoshop 2
J Problema con questo errore Error was: Undefined index: title linea 9 PHP 21
Shyson Mettere hover a css in linea HTML e CSS 1
L Linea effetto "scavato/incisione" HTML e CSS 2
P Come allungare una linea in verticale HTML e CSS 2
R Telefonare da PC con la linea tradizionale Windows e Software 1
E limitare il numero di risultato per linea PHP 4
S Aggiungere una linea in un form automaticamente PHP 1
B linea separatrice HTML e CSS 6
E linea sfumata "Il tratto avanzato non è supportato in questo player" Flash 1
bluroy Nuova Linea Abbigliamento!!! Altri Annunci 3
S Prob Generazione Linea Flash 0
U Box chi c'è in linea PHP 1
A iis in modalità non in linea Web Server 1
J Linea Temporale Flash 2
C Linea che compare graduatamente Flash 0
grottafelix Utenti in linea Classic ASP 2

Discussioni simili