|
Abbiamo visto quindi variabili e costanti. Questi elementi si usano in maniera proficua componendole in espressioni,
che utilizzano anche gli operatori. Gli operatori del PHP sono i seguenti, in ordine di precedenza (dalla più alta alla più
bassa).
| Associatività |
Operatore |
| a sinistra |
, |
| a sinistra |
or |
| a sinistra |
xor |
| a sinistra |
and |
| a destra |
print |
| a sinistra |
= += -= *= /= .= %= &= != ~= <<= >>= |
| a sinistra |
? : |
| a sinistra |
|| |
| a sinistra |
&& |
| a sinistra |
| |
| a sinistra |
^ |
| a sinistra |
& |
| non associativo |
== != |
| non associativo |
< <= > >= |
| a sinistra |
<< >> |
| a sinistra |
+ - . |
| a sinistra |
* / % |
| a destra |
! ~ ++ -- (int) (double) (string) (array)
(object) @ |
| a destra |
[ |
| non associativo |
new |
NOTA: Molti concetti di Perl, PHP, Java e JavaScript, soprattutto per quanto riguarda le espressioni, sono ripresi dal
linguaggio C. Questi linguaggi hanno in comune i concetti di espressioni con effetti collaterali, associatività e
precedenza sugli operatori, operatori booleani a corto circuito. Questi concetti sono discussi in dettaglio nel paragrafo
8.2 su Java, pertanto non verranno riproposti qui. Java però opera una distinzione di tipo forte, per cui certi operatori
possono operare solo su interi, altri su booelani eccetera. Bisogna tenere presente che in Perl, PHP e JavaScript non c'è
questa distinzione perché c'è un solo tipo di dato scalare che comprende numeri e stringhe: tutte le conversioni di tipo
(da numero a stringa e viceversa, cambi di precisione) vengono effettuate implicitamente.
Rispetto a quanto esposto nel capitolo 8 c'è da notare quanto segue:
- esiste l'operatore . che serve a concatenare le stringhe
- esiste l'operatore .= che effettua una concatenazione con assegnamento: $a .= $b significa $a = $a . $b
- gli operatori &, | e ~ eseguono soltanto operazioni binarie e non booleane sugli operandi; ovvero considerano gli
operandi come numeri interi (o li convertono) ed esguono le operazioni bit a bit di AND, OR e NOT
- Esistono and e &&, or e ||, che sono identiche come comportamento (in particolare hanno un comportamento a
corto circuito) ma hanno diversi livelli di precedenza.
ATTENZIONE: c'è una fondamentale differenza tra il Perl e il PHP. In Perl non c'è sostanziale differenza tra numeri e stringhe,
per cui occorre distinguere tra operazioni numeriche e di stringa, introducendo operatori come == per i numeri e eq per
le stringhe, o >= e gt e così via. In PHP invece, gli oggetti contenuti nelle variabili hanno un tipo: se è stato assegnato
un intero, sono intere, se è stata assegnata una stringa sono una stringa, se gli è stato assegnato un array sono un array.
Pertanto, l'operatore == si comporta come operatore di stringhe quando il primo operando è una stringa, e si comporta
come operatore numerico quando il primo operando è un numero. Però questa tipizzazione implicita comporta la
necessità di forzare a volte il tipo. A questo scopo esistono gli operatori di conversione (int) (double) eccetera,
che servono a garantire che una variabile contenga effettivamente il tipo richiesto.
|