In php, solitamente, abbiamo più possibilità per raggiungere lo stesso scopo!
Ad esempio, per le classiche condizioni if/else, possiamo utilizzare lo switch, o l’operatore ternario.
In questo articolo faremo alcuni esempi su come e perché scegliere una soluzione anziché l’altra!
if-else; operatore ternario; switch… cosa usare, e perché? usarli insieme, si può?
L’esempio classico if-else (cerchiamo la lingua del browser dell’utente):
<?php // Lang: $lang = "en"; // variabile (lingua) di default per evitare warning inutili if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) { $lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); } if ($lang == "it") // se $lang è it: { echo "testo in italiano"; // stampa questo } else // altrimenti { echo "default text in english"; // default: stampa questo } ?>
Codice abbastanza chiaro e pulito – seppur decisamente ottimizzabile, non trovate?
Codice che trovai quando cercavo un esempio per cercare le lingue…
Ecco, invece, un metodo decisamente più “compatto” (l’operatore ternario):
<?php // stampa: se esiste $_SERVER['HTTP_ACCEPT_LANGUAGE'] ed è "it" il testo in italiano, altrimenti (sia che esista che nel caso non esista) il testo in inglese echo isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) && substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == "it" ? "testo in italiano" : "default text in english"; ?>
Il punto interrogativo equivale all’ “echo”, i due punti, invece, all’ “else” e con un adeguato uso delle parentesi tonde si può simulare anche l’elseif.
<?php $a = "1"; echo $a === "1" ? 'a === 1' : ($a > "1" ? 'a > 1' : 'a < 1'); ?>
PS: a partire dalla versione 5.3 del php, esiste un modo ancora più compatto per usare l’operatore ternario = Elvis operator
$c = $a ?: $b; // equivalent to $c = $a ? $a : $b;
NB: alcuni richiudono l’intero codice tra parentesi tonde anche quando non necessario:
<?php $var = 2; echo ($var > 1 ? true : false); // true ?>
Ma, in simili casi, funziona anche senza e quindi io lo scrivo senza:
<?php $var = 2; echo $var > 1 ? true : false; // true ?>
Le parentesi sono necessarie, invece, se usiamo l’operatore ternario in una variabile con altro codice:
//example 1 $var = 2; $var = $var > 1 ? true : false; // valid: 1 > parenthesis not required echo $var; //example 2 $var = 2; $var = "test".($var > 1 ? true : false); // valid: test1 > parenthesis required echo $var;
(o, come nell’esempio precedente, per creare unioni in un blocco di istruzioni e – ad esempio – simulare un elseif)
Oltre a echo/else e operatore ternario abbiamo lo switch (+ operatore ternario per la variabile)
<?php // se $_SERVER['HTTP_ACCEPT_LANGUAGE'] esiste setta $lang con substr*, altrimenti "en" $lang = isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : "en"; // quindi lo switch con $lang switch ($lang) { // se it: case "it": $string = "stringa in italiano"; $otherstring = "altra stringa in italiano..."; break; // se en (e default) case "en": default: $string = "string in english"; $otherstring = "other string in english..."; break; } echo "<pre>".$lang."\n".$string."\n".$otherstring."</pre>"; ?>
Questo si rivela molto utile (soprattutto in un caso come questo dove non dobbiamo settare solo una variabile, ma dobbiamo generare un vero e proprio sistema di traduzione, e quindi non possiamo proprio affidarci all’operatore ternario).
Bene, adesso sappiamo come riconoscere la lingua del visitatore, e stampare il testo di conseguenza, con il metodo più adatto!
A voi la scelta e, ricordatevi, scrivete php pulito ed inserite i commenti (quel che fate oggi potrebbe non tornarvi domani e quindi un commento, una nota, potrebbe aiutarvi) 😉