Operatori PHP
Scopri tutti i tipi di operatori PHP — aritmetici, di confronto, logici, stringa, array, spaceship e null-coalescing — con esempi e regole di precedenza.
Un operatore prende uno o più valori (chiamati operandi) e produce un nuovo valore da essi. Gli operatori sono i mattoni fondamentali di ogni espressione che scrivi in PHP — ti permettono di fare aritmetica, confrontare valori, combinare condizioni booleane, assegnare risultati alle variabili e unire stringhe.
Questo capitolo copre ogni categoria di operatori PHP con esempi eseguibili: aritmetici, di assegnazione, di confronto, logici, di incremento/decremento, di stringa, di array, l'operatore spaceship, l'operatore null-coalescing e come la precedenza degli operatori decide l'ordine di valutazione.
Operatori Aritmetici
Gli operatori aritmetici eseguono le familiari operazioni matematiche sui numeri.
| Operatore | Nome | Esempio | Risultato |
|---|---|---|---|
+ | Addizione | 10 + 5 | 15 |
- | Sottrazione | 10 - 5 | 5 |
* | Moltiplicazione | 10 * 5 | 50 |
/ | Divisione | 10 / 4 | 2.5 |
% | Modulo (resto) | 10 % 3 | 1 |
** | Esponenziazione | 2 ** 4 | 16 |
<?php
$x = 10;
$y = 3;
echo $x + $y; // 13
echo $x - $y; // 7
echo $x * $y; // 30
echo $x / $y; // 3.3333333333333
echo $x % $y; // 1 (remainder of 10 / 3)
echo $x ** $y; // 1000 (10 to the power of 3)Nota: A differenza di molti linguaggi, il
/di PHP non tronca.10 / 4è2.5, non2. Usaintdiv()per la divisione intera. L'operatore%funziona sugli interi; per i resti in virgola mobile usafmod().
Operatori di Assegnazione
L'operatore di assegnazione di base è = — memorizza il valore a destra nella variabile a sinistra. Ogni operatore aritmetico ha anche una forma combinata (composta) che aggiorna una variabile in-place.
| Operatore | Equivalente a |
|---|---|
$a += $b | $a = $a + $b |
$a -= $b | $a = $a - $b |
$a *= $b | $a = $a * $b |
$a /= $b | $a = $a / $b |
$a %= $b | $a = $a % $b |
$a .= $b | $a = $a . $b (string append) |
<?php
$total = 100;
$total += 20; // 120
$total -= 50; // 70
$total *= 2; // 140
echo $total; // 140Operatori di Confronto
Gli operatori di confronto confrontano due valori e restituiscono un boolean (true o false). Nota la distinzione importante tra confronto lasco (==) e stretto (===).
| Operatore | Nome | true quando... |
|---|---|---|
== | Uguale | i valori sono uguali dopo il type juggling |
=== | Identico | i valori e i tipi sono uguali |
!= / <> | Diverso | i valori non sono uguali |
!== | Non identico | i valori o i tipi differiscono |
< | Minore di | il valore a sinistra è più piccolo |
> | Maggiore di | il valore a sinistra è più grande |
<= | Minore o uguale | |
>= | Maggiore o uguale |
<?php
var_dump(10 == "10"); // bool(true) — values match after juggling
var_dump(10 === "10"); // bool(false) — int vs string, types differ
var_dump(5 != 8); // bool(true)
var_dump(5 >= 5); // bool(true)Attenzione: Preferisci
===quando ti importa dei tipi.0 == "abc"èfalsenelle versioni moderne di PHP (8.0+), ma il confronto lasco ha ancora casi limite sorprendenti — il confronto stretto li evita.
L'operatore spaceship <=>
L'operatore spaceship confronta due valori e restituisce -1, 0 o 1. È più utile come valore di ritorno di una callback di ordinamento.
<?php
echo 1 <=> 2; // -1 (left is smaller)
echo 2 <=> 2; // 0 (equal)
echo 3 <=> 2; // 1 (left is larger)Operatori Logici
Gli operatori logici combinano espressioni booleane, tipicamente all'interno di condizioni if.
| Operatore | Nome | true quando... |
|---|---|---|
&& / and | And | entrambi i lati sono veri |
|| / or | Or | almeno un lato è vero |
! | Not | l'operando è falso |
xor | Or esclusivo | esattamente un lato è vero |
<?php
$age = 25;
$hasLicense = true;
var_dump($age >= 18 && $hasLicense); // bool(true)
var_dump($age < 18 || $hasLicense); // bool(true)
var_dump(!$hasLicense); // bool(false)
&&eandsi comportano allo stesso modo nelle condizioni ma hanno una precedenza diversa —and/orsi legano più debolmente di=, il che può sorprendere. Usa sempre&&e||.
PHP esegue anche il corto-circuito: in $a && expensive(), se $a è false il lato destro non viene mai valutato.
Operatori di Incremento e Decremento
Questi operatori aggiungono o sottraggono 1 da una variabile. La loro posizione (pre vs post) cambia ciò che l'espressione valuta.
| Operatore | Effetto |
|---|---|
++$x | Pre-incremento: incrementa, poi restituisce il nuovo valore |
$x++ | Post-incremento: restituisce il vecchio valore, poi incrementa |
--$x | Pre-decremento |
$x-- | Post-decremento |
<?php
$x = 5;
echo $x++; // 5 (prints old value, then $x becomes 6)
echo $x; // 6
echo ++$x; // 7 (increments first, then prints)Operatori di Stringa
PHP ha due operatori dedicati alle stringhe:
.— l'operatore di concatenazione, unisce due stringhe..=— l'operatore di assegnazione con concatenazione, aggiunge alla variabile.
<?php
$greeting = "Hello";
$greeting .= ", World!"; // append
echo $greeting; // Hello, World!
echo "PHP" . " " . "rocks"; // PHP rocksOperatori di Array
Gli operatori di array lavorano su interi array.
| Operatore | Nome | Descrizione |
|---|---|---|
+ | Unione | le chiavi da destra vengono aggiunte solo se mancanti a sinistra |
== | Uguaglianza | stesse coppie chiave/valore |
=== | Identità | stesse coppie, stesso ordine, stessi tipi |
<?php
$a = ["a" => 1, "b" => 2];
$b = ["b" => 99, "c" => 3];
print_r($a + $b);
// Array ( [a] => 1 [b] => 2 [c] => 3 )
// "b" keeps the LEFT value (2), "c" is addedOperatore Null-Coalescing ??
L'operatore ?? restituisce il suo operando sinistro se esiste e non è null, altrimenti il destro. È il sostituto pulito per i controlli isset().
<?php
$data = ["name" => "Ann"];
$name = $data["name"] ?? "Guest"; // "Ann"
$role = $data["role"] ?? "Member"; // "Member" — key missing, no warning
echo "$name / $role"; // Ann / MemberL'assegnazione null-coalescing ??= assegna solo quando la variabile è attualmente null o non impostata: $config["theme"] ??= "dark";.
Precedenza degli Operatori
Quando un'espressione mescola operatori, la precedenza decide quale viene eseguito per primo, proprio come in matematica (* prima di +). Usa le parentesi per rendere esplicita l'intenzione e sovrascrivere i valori predefiniti.
<?php
echo 2 + 3 * 4; // 14 — * binds tighter than +
echo (2 + 3) * 4; // 20 — parentheses force addition firstDal più alto al più basso, alcuni livelli chiave: **, poi !, poi * / %, poi + -, poi confronto (< > == ===), poi &&, poi ||, e infine =. In caso di dubbio, aggiungi parentesi — non costano nulla e prevengono i bug.
Riepilogo
- Aritmetici (
+ - * / % **) operano sui numeri;/restituisce un float,%restituisce il resto. - Assegnazione (
= += .=…) memorizza e aggiorna valori; le forme composte sono abbreviazioni. - Confronto (
== === != <=>) restituisce booleani — preferisci===stretto per evitare sorprese da type-juggling. - Logici (
&& || !) combina condizioni ed esegue il corto-circuito. - Incremento/decremento (
++ --) si differenziano per posizione pre/post. - Stringa (
. .=) unisce testo; array (+ == ===) confronta e unisce array. ??fornisce valori predefiniti per i valori mancanti; la precedenza e le parentesi controllano l'ordine di valutazione.
Successivamente, metti questi operatori al lavoro all'interno delle istruzioni condizionali e dei cicli.