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).
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.
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.
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.
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.
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.
La sintassi heredoc internamente funziona nello stesso modo delle virgolette, ma
è adatta per la creazione di stringhe multi-linea senza la necessità di
concatenamento.
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.
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.
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.