Associatività e precedenza degli operatori
Ecco un punto fondamentale della lezione. Queste cose vanno conosciute a memoria se si intende fare qualcosa seriemente altrimenti non si andrà facilmente oltre al 2 + 2.
Prima di tutto chiariamo cosa sono l'associatività e la precedenza.
Associatività e la precedenza di ogni operatore sono definite nel PHP esattamente come in algebra e ci permettono di scrivere espressioni complesse molto facilmente. L'interprete divide infatti tutti gli operatori che abbiamo visto in vari gruppi con priorità diversa.
Ad esempio il gruppo di precedenza A avrà priorità maggiore del gruppo B quindi quando verrà effettuata la valutazione dell'espressione per trovarne il risultato tutti gli operatori del gruppo A saranno applicati per primi.
Tramite l'associatività dei vari operatori l'interprete sa invece come comportarsi quando incontra due operatori che appartengono allo stesso gruppo di precedenza.
Qui di seguito riporto una piccola tabella con tutti gli operatori visti in lezione con la rispettiva associatività e gruppi di precedenza. Tutti gli operatori sono in ordine crescente quindi i primi sono quelli con precedenza piú bassa.
| Associatività | Operatori |
|---|---|
| Sinistra | , |
| Sinistra | or |
| Sinistra | xor |
| Sinistra | and |
| Destra | |
| Sinistra | = += -= *= /= .= %= &= |= ^= ~= <<= >>= |
| Sinistra | ? : |
| Sinistra | || |
| Sinistra | && |
| Sinistra | | |
| Sinistra | ^ |
| Sinistra | & |
| Non associativi | == != === !== |
| Non associativi | < <= > >= |
| Sinistra | << >> |
| Sinistra | + - . |
| Sinistra | * / % |
| Destra | ! ~ ++ -- (int) (float) (string) (array) (object) @ |
| Destra | [ |
| Non associativi | new |
Quando si vuole per qualche motivo forzare l'interprete a valutare un espressione prima delle altre basta racchiuderla tra parentesi tonde proprio come in matematica.
Le prime volte è utile anche costruirsi l'AST (abstract syntax tree) e fare una navigazione post-order dell'espressione per prendere familiarità con operatori, associatività e precedenza.
<?php /* esempio di espressioni */ $a = 5 && 10; $a = 5 and 10; /* questa espressione non ha lo stesso effetto della precedente l'operatore and ha una precedenza minore di quello di assegnazione */ $a = (5 and 10); // questa è corretta $x = 10 + 4 * 2; /* il risultato è 18 e non 28. l'operatore di moltiplicazione ha priorità maggiore */ $k = ~$x++; /* l'operatore "~" e "++" hanno la stessa precedenza. Hanno associatività a destra quindi il "++" viene applicato per prima */ $z = 4 + (4 * 2); ?>
AST e post-order dell'espressione precedente:
+------------+
| <op-exp> |
+------------+
7 / | \
/ | \
/ | \
+---+ +---+ +-------------+
| 4 | | + | | <op-exp> |
+---+ +---+ +-------------+
1 2 6 / | \
/ | \
/ | \
+---+ +---+ +---+
| 4 | | * | | 2 |
+---+ +---+ +---+
3 4 5
-
» 2011-05-28
Come usare i Cookie con PHP -
» 2010-04-24
Sintassi alternativa -
» 2010-04-24
Return -
» 2010-04-24
Break
Se ti piace questo articolo, puoi collegarlo al tuo sito copiando il seguente codice HTML nelle tue pagine.
-
30-06-2011 → Anonimo
ha scritto un commento in
Tutorial sul ripristino di GRUB -
26-05-2011 → Bianca
ha scritto un commento in
Arrotondare gli angoli di un div usando i CSS 3 -
25-05-2011 → `wee`
ha scritto un commento in
Le landing page - Cosa sono e a cosa servono -
19-02-2011 → Anonimo
ha scritto un commento in
Linux Reference - Lista comandi utili per Linux -
06-01-2011 → Sergio
ha scritto un commento in
Ottimizzare i metatag delle pagine multilingua -
05-06-2010 → Anonimo
ha scritto un commento in
SQL - Data Manipulation Language - SELECT
Inserisci un commento: