Le basi
Operatori di confronto
Gli operatori di confronto sono spesso un aspetto trascurato di PHP, il che può portare a molti risultati inaspettati. Uno di questi problemi deriva dai conforonti stretti (i confronti di valori booleani come se fossero interi).
Istruzioni condizionali
Istruzioni if
Nell’utilizzo di istruzioni ‘if/else’ in una funzione o in una classe, si pensa spesso che ‘else’ debba essere necessariamente usato per potenziali risultati. Ma se il risultato è la restituzione di un valore, ‘else’ non è necessario, perché ‘return’ terminerà la funzione, rendendo ‘else’ inutile.
Istruzioni switch
Le istruzioni switch sono un ottimo modo per evitare di scrivere infiniti if ed elseif, ma ci sono un paio di cose a cui prestare attenzione:
- Le istruzioni switch confrontano solo i valori, non il tipo (equivalente a ‘==’)
- Iterano caso dopo caso finché non viene trovata una corrispondenza. Se non viene trovata, viene eseguita quella di default (se definita)
- Senza un ‘break’, continueranno a implementare ogni caso finché non raggiungono un break/return
- In una funzione, l’utilizzo di ‘return’ elimina la necessità per un ‘break’, perché esso termina la funzione
Namespace globale
Quando usi i namespace, potresti scoprire che le funzioni native sono nascoste dalle funzioni che hai scritto. Per sistemarlo, riferisciti alla funzione globale mettendo un backslash prima del nome della funzione.
Stringhe
Concatenamento
- Se la tua linea eccede la lunghezza raccomandata (120 caratteri), considera il concatenamento
- Per leggibilità è meglio usare gli operatori di concatenamento invece che gli operatori concatenanti di assegnazione
- Se ti trovi nello scope originale della variabile, usa l’indentazione quando il concatenamento occupa una nuova linea
Tipi di stringhe
Le stringhe sono una serie di caratteri, e fin qui il concetto è piuttosto semplice. Detto questo, ci sono tipi diversi di stringhe che hanno una sintassi e funzionalità leggermente differenti.
Apici singoli
Gli apici singoli vengono usati per denotare una “stringa letterale”. Le stringhe letterali non eseguono il parsing di caratteri speciali o variabili.
Se usi gli apici singoli, puoi inserire il nome di una variabile così: 'qualche
$cosa'
e vedresti l’output esatto quale $cosa
. Se usi gli apici doppi, la stringa cercherebbe di recuperare la variabile $cosa
e visualizzerebbe degli errori in caso
la variabile non venisse trovata.
Virgolette
Le virgolette sono il coltellno svizzero delle stringhe. Non solo effettuano il parsing delle variabili come abbiamo detto sopra, ma di tutti i caratteri speciali come \n
per la nuova linea, \t
per la tabulazione etc.
Gli apici doppi possono contenere variabili; questa si chiama “interpolazione”.
Quando usi l’interpolazione, capita spesso che il nome di una variabile tocchi un altro carattere. Questo renderà impossibile distinguere il nome della variabile dal carattere letterale.
Per ovviare al problema, racchiudi la variabile in un paio di parentesi graffe.
Sintassi nowdoc
La sintassi nowdoc è stata introdotta in PHP 5.3 e internamente funziona nello stesso modo degli apici singoli, ma è adatta per creare stringhe multi-linea senza dover usare il concatenamento.
Sintassi heredoc
La sintassi heredoc internamente funziona nello stesso modo delle virgolette, ma è adatta per la creazione di stringhe multi-linea senza la necessità di concatenamento.
Qual è più veloce?
C’è un mito secondo cui gli apici singoli sono più veloci delle stringhe con apici doppi. Non è vero.
Se stai definendo una stringa e non cerchi di concatenare valori o eseguire altre operazioni complicate, allora gli apici singoli e doppi sono identici. Nessuno dei due è più veloce.
Se stai concatenando stringhe multiple di qualunque tipo, o interpolando valori in una stringa con apici doppi, allora i risultati possono variare. Se stai lavorando con un piccolo numero di valori, il concatenamento è di poco più veloce. Con molti valori, l’interpolazione è di poco più veloce.
Indipendentemente da ciò che fai con le stringhe, nessuno dei tipi avrà mai un impatto evidente sulla tua applicazione. Cercare di riscrivere il codice per usare l’uno o l’altro tipo è un esercizio inutile, quindi evita queste micro-ottimizzazioni a meno che tu non capisca realmente il significato e l’impatto delle differenze.
Operatore ternario
L’operatore ternario è un ottimo modo per sintetizzare il codice, ma viene spesso abusato. Anche se gli operatori ternari possono essere nidificati, è consigliato usarne uno per riga per leggibilità.
Ecco invece un esempio che sacrifica ogni forma di leggibilità per ridurre il numero delle righe:
Per restituire un valore con gli operatori ternari usa la sintassi corretta.
È importante notare che non serve usare l’operatore ternario per restituire un valore booleano. Un esempio:
Lo stesso si può dire per tutte le operazioni (===, !==, !=, == etc.)
Uso delle parentesi con gli operatori ternari per forma e funzione
Quando usi l’operatore ternario, le parentesi possono fare la loro parte per migliorare la leggibilità e anche per unire più condizioni in blocchi di istruzioni. Un esempio di un uso superfluo delle parentesi è:
Le parentesi permettono anche di creare unioni in un blocco di istruzioni, in modo che il blocco venga controllato come una sola condizione. Ecco un esempio in cui il blocco restituirà true se sia ($a == 3 e $b == 4) che $c == 5 sono veri.
Un altro esempio è la porzione qui sotto che restituirà true se ($a != 3 E $b != 4) O $C == 5.
Dichiarazioni di variabili
A volte, gli sviluppatori cercano di rendere il loro codice “più pulito” dichiarando variabili predefinite con un nome differente. Ciò che questo comporta, in realtà, è un raddoppiamento del consumo di memoria dello script. Nell’esempio sottostante, presumiamo che una stringa di esempio contenga dati per 1MB. Copiando la variabile hai portato il consumo di memoria dello script a 2MB.
Return to Main Page