Menu

Operatori PHP: aritmetici, logici, di stringa e altri

Gli operatori PHP lavorano sui valori: +, -, *, /, %, ** per l'aritmetica, =, +=, .=, ??= per l'assegnazione, &&, ||, ! e xor per la logica, . per unire stringhe, ==, ===, <=> per il confronto e ++, -- per incrementare. Impara ogni gruppo con esempi eseguibili, più la trappola di precedenza tra and e &&.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Un operatore prende uno o più valori e ne produce uno nuovo: $a + $b somma, $a . $b unisce stringhe, $a && $b è un AND logico, $a === $b confronta, $i++ incrementa.

/ restituisce un float a meno che due interi non si dividano esattamente: 17 / 5 vale 3.4, 10 / 5 è l'intero 2. Quando vuoi solo la parte intera, usa intdiv(). L'arrotondamento è trattato nella pagina sulla matematica.

Operatori aritmetici

OperatoreNomeEsempioRisultato
+Addizione7 + 29
-Sottrazione7 - 25
*Moltiplicazione7 * 214
/Divisione7 / 23.5
%Modulo (resto)7 % 21
**Potenza7 ** 249
-$aNegazione-7-7

Il modulo è utile per "un elemento ogni N" e per i controlli pari/dispari. Il suo risultato prende il segno del lato sinistro, e la divisione per zero lancia un errore che puoi catturare:

Operatori di assegnazione

= memorizza un valore. Ogni operatore aritmetico e di stringa ha una forma combinata che aggiorna una variabile sul posto.

??= appartiene alla famiglia dell'operatore di null coalescing. Assegna solo quando la variabile non è impostata o è null.

Incremento e decremento: ++ e --

$i++ restituisce il valore attuale, poi aggiunge 1. ++$i aggiunge 1, poi restituisce il nuovo valore. La differenza si vede solo quando usi il risultato nella stessa espressione.

Il trucco con le lettere è il modo in cui spesso si generano i nomi delle colonne dei fogli di calcolo (A, B, ... Z, AA).

Operatori logici: &&, ||, ! e xor

OperatoreVero quando
$a && $bentrambi sono veri
$a || $balmeno uno è vero
!$a$a è falso
$a xor $besattamente uno è vero
$a and $b, $a or $bcome && e ||, con precedenza più bassa

&& e || sono a corto circuito: il lato destro non viene valutato quando il lato sinistro decide già il risultato. È questo che rende sicuro isset($user) && $user->isAdmin().

and vs &&: la trappola della precedenza

and e or legano meno di =, quindi in un'assegnazione si applicano dopo che il valore è stato salvato. È un bug classico:

La precedenza bassa è utile in un idioma, $file = fopen($path, 'r') or die('Cannot open');, dove vuoi che l'assegnazione avvenga per prima. In tutti gli altri casi, usa && e ||.

Operatori di stringa: . e .=

PHP ha due operatori di stringa: . unisce due stringhe ("Grace" . " " . "Hopper") e .= aggiunge in fondo a una variabile ($html .= "<li>"). + non unisce mai le stringhe: "3" + "4" è il numero 7, mentre "3" . "4" è la stringa "34". La pagina sulle stringhe tratta interpolazione e virgolette.

Confronto e l'operatore spaceship <=>

== confronta dopo aver convertito i tipi, === controlla anche il tipo, e <=> restituisce -1, 0 o 1, che è esattamente ciò che serve alle callback di ordinamento. I dettagli e la tabella completa del confronto non stretto sono nella pagina sugli operatori di confronto.

Operatori sugli array

+ sugli array è un'unione: vincono le chiavi dell'array di sinistra e da quello di destra si aggiungono solo le chiavi mancanti. Sorprende chi si aspetta che accodi. == controlla che le coppie chiave/valore siano le stesse, === richiede anche lo stesso ordine e gli stessi tipi.

Per accodare una lista a un'altra, usa array_merge() o la sintassi spread [...$a, ...$b].

Precedenza degli operatori

Quando un'espressione mescola operatori, PHP li applica in un ordine fisso. Quelli che traggono più spesso in inganno, con ciò che stampa PHP 8.3:

echo 2 + 3 * 4;        // 14: * before +
echo (2 + 3) * 4;      // 20
echo 2 ** 3 ** 2;      // 512: right to left, 2 ** 9
echo -2 ** 2;          // -4: ** before unary minus
echo "Sum: " . 2 + 3;  // Sum: 5, since PHP 8 + runs before .

Nel dubbio, aggiungi le parentesi. Non costano nulla e chi leggerà la riga dopo di te non dovrà ricordarsi la tabella.

Domande frequenti

Qual è la differenza tra and e && in PHP?

Sono entrambi un AND logico, ma and ha precedenza più bassa di =. Quindi $x = true and false; salva true in $x (l'assegnazione avviene prima), mentre $x = true && false; salva false. Usa && e || nelle espressioni e tieni and/or fuori dalle assegnazioni.

Cosa fa % in PHP?

% è l'operatore modulo: restituisce il resto di una divisione intera, quindi 10 % 3 vale 1. Il risultato prende il segno dell'operando sinistro (-7 % 3 vale -1). Per i float usa fmod(), e % 0 lancia un DivisionByZeroError.

Come elevo un numero a potenza in PHP?

Usa l'operatore **: 2 ** 10 vale 1024. È associativo a destra, quindi 2 ** 3 ** 2 è 2 ** 9 = 512, e lega più del meno unario, quindi -2 ** 2 vale -4. La funzione pow(2, 10) fa lo stesso.

Qual è la differenza tra $i++ e ++$i in PHP?

Entrambi aggiungono 1 a $i. $i++ (post-incremento) restituisce il vecchio valore e poi incrementa; ++$i (pre-incremento) incrementa prima e restituisce il nuovo valore. Su una riga a sé, come il passo di un ciclo for, non c'è differenza.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA