Lezione 6: Operatori Aritmetici e Logici in PHP - Guida Completa

Scopri come manipolare i dati e creare logiche complesse in PHP utilizzando gli operatori aritmetici, di assegnazione e logici. Una guida pratica per principianti.

Introduzione agli Operatori in PHP

Benvenuti alla sesta lezione del nostro percorso "Impara PHP in 50 lezioni". Dopo aver compreso come dichiarare le variabili e utilizzare i diversi tipi di dati, è arrivato il momento di dare vita ai nostri programmi. Se le variabili sono i "contenitori" delle informazioni, gli operatori sono gli strumenti che ci permettono di manipolare quelle informazioni.

In programmazione, un operatore è un simbolo che indica al compilatore o all'interprete di eseguire una specifica operazione matematica, logica o di confronto sui suoi operandi. Immaginate di voler calcolare il totale di un carrello e-commerce, verificare se un utente ha l'età sufficiente per accedere a un sito o controllare se una password inserita corrisponde a quella salvata nel database: in tutti questi casi, avrete bisogno degli operatori.

In questa lezione analizzeremo tre grandi categorie di operatori: quelli aritmetici, quelli di assegnazione e quelli logici, spiegando non solo come si scrivono, ma soprattutto perché si usano e quali sono le insidie più comuni per chi inizia.

Operatori Aritmetici: Fare Calcoli in PHP

Gli operatori aritmetici sono i più intuitivi, poiché ricalcano le operazioni che impariamo a scuola. PHP li utilizza per eseguire calcoli numerici tra interi (integers) e numeri decimali (floats).

Gli operatori principali

  • Addizione (+): Somma due valori.
  • Sottrazione (-): Sottrae il secondo valore dal primo.
  • Moltiplicazione (*): Moltiplica due valori.
  • Divisione (/): Divide il primo valore per il secondo. Il risultato è spesso un float.
  • Modulo (%): Restituisce il resto di una divisione intera. È estremamente utile per verificare se un numero è pari o dispari.
  • Esponenziazione ()**: Eleva un numero a una determinata potenza (introdotto in PHP 5.6).

Esempio di codice: Calcoli Base

Vediamo come implementare queste operazioni in uno script PHP reale. In questo esempio, simuleremo il calcolo di un'area e l'applicazione di uno sconto.

<?php
// Definiamo alcune variabili
$base = 10;
$altezza = 5;
$prezzo_prodotto = 100;
$sconto = 20;

// 1. Calcolo Area (Moltiplicazione)
$area = $base * $altezza;
echo "L'area del rettangolo è: " . $area . " mq\
"; // Output: 50

// 2. Calcolo Prezzo Finale (Sottrazione)
$prezzo_finale = $prezzo_prodotto - $sconto;
echo "Il prezzo scontato è: " . $prezzo_finale . "€\
"; // Output: 80

// 3. Uso del Modulo (per capire se un numero è pari)
$numero = 15;
if ($numero % 2 == 0) {
    echo "Il numero $numero è pari.";
} else {
    echo "Il numero $numero è dispari.";
} // Output: Il numero 15 è dispari

// 4. Esponenziazione
$potenza = 2 ** 3;
echo "2 elevato a 3 è: " . $potenza; // Output: 8
?>

Nel codice sopra, abbiamo utilizzato l'operatore modulo % per determinare la parità di un numero. Questo è un caso d'uso classico: se il resto della divisione per 2 è zero, il numero è pari; altrimenti è dispari.

Operatori di Assegnazione e Incremento

L'operatore di assegnazione più semplice è l'uguale (=), che assegna il valore a destra alla variabile a sinistra. Tuttavia, PHP offre degli "operatori combinati" che permettono di scrivere codice più conciso.

Assegnazione Combinata

Invece di scrivere $a = $a + 5;, possiamo scrivere $a += 5;. Questo non cambia il risultato, ma rende il codice più leggibile e professionale. Ecco i più comuni:

  • += (Addizione e assegnazione)
  • -= (Sottrazione e assegnazione)
  • *= (Moltiplicazione e assegnazione)
  • /= (Divisione e assegnazione)

Incremento e Decremento

In PHP troviamo spesso gli operatori ++ (incremento) e -- (decremento). Sono fondamentali all'interno dei cicli (che vedremo in lezioni successive).

  • $x++: Incrementa il valore di 1 dopo che l'espressione è stata valutata (post-incremento).
  • ++$x: Incrementa il valore di 1 prima che l'espressione sia valutata (pre-incremento).

Sebbene sembrino identici, la differenza è cruciale quando l'operazione avviene all'interno di un echo o di un'assegnazione.

Operatori di Confronto: La Base della Logica

Prima di passare agli operatori logici, dobbiamo capire come confrontare due valori. Gli operatori di confronto restituiscono sempre un valore booleano: true (vero) o false (falso).

  • Uguale (==): Verifica se i valori sono uguali (senza considerare il tipo).
  • Identico (===): Verifica se i valori sono uguali E dello stesso tipo. Questo è l'operatore più sicuro da usare in PHP.
  • Diverso (!= o <>): Verifica se i valori sono diversi.
  • Non Identico (!==): Verifica se i valori sono diversi o di tipo differente.
  • Maggiore di (>), Minore di (<), Maggiore o uguale (>=), Minore o uguale (<=).

Perché usare === invece di ==?

PHP è un linguaggio a tipizzazione dinamica. Se confrontate la stringa "5" con l'intero 5 usando ==, PHP dirà che sono uguali. Se usate ===, PHP dirà che sono diversi perché uno è una stringa e l'altro un numero. Usare l'identità (===) evita bug silenziosi e imprevisti nel codice.

Operatori Logici: Gestire Condizioni Complesse

Gli operatori logici ci permettono di combinare più confronti per creare regole decisionali sofisticate. Sono il cuore di ogni applicazione web.

Gli Operatori Fondamentali

  1. AND (&& oppure and): Restituisce true solo se ENTRAMBE le condizioni sono vere.
  2. OR (|| oppure or): Restituisce true se ALMENO UNA delle condizioni è vera.
  3. NOT (!): Inverte il valore booleano. Se una condizione è true, ! la rende false.
  4. XOR: Restituisce true se una condizione è vera e l'altra è falsa (ma non entrambe).

Esempio di codice: Sistema di Accesso

Immaginiamo di dover gestire l'accesso a un'area riservata. L'utente può entrare se ha un account attivo E se ha inserito la password corretta, OPPURE se è un amministratore di sistema.

<?php
$utente_attivo = true;
$password_corretta = true;
$is_admin = false;

// Caso 1: Accesso standard (Utente attivo AND password corretta)
if ($utente_attivo && $password_corretta) {
    echo "Accesso consentito come utente standard.\
";
} else {
    echo "Credenziali errate o account sospeso.\
";
}

// Caso 2: Accesso con superpoteri (Utente standard OR Amministratore)
// Usiamo l'operatore OR (||)
if (($utente_attivo && $password_corretta) || $is_admin) {
    echo "Benvenuto nell'area riservata!\
";
} else {
    echo "Accesso negato.\
";
}

// Caso 3: Uso del NOT (!)
$is_logged_in = false;
if (!$is_logged_in) {
    echo "Per favore, effettua il login per continuare.";
} // Output: Per favore, effettua il login per continuare.
?>

In questo esempio, l'uso delle parentesi è fondamentale per definire la priorità delle operazioni: prima valutiamo l'AND tra account e password, e poi il risultato di questa operazione lo confrontiamo con l'OR dell'amministratore.

Esempi Pratici e Casi d'Uso Reali

Per consolidare questi concetti, vediamo come gli operatori vengono applicati in scenari di sviluppo web quotidiano.

1. Calcolo dell'IVA

In un e-commerce, non puoi semplicemente sommare l'IVA, devi moltiplicare il prezzo netto per l'aliquota.

$prezzo_netto = 150.00;
$aliquota_iva = 0.22; // 22%
$iva_totale = $prezzo_netto * $aliquota_iva;
$prezzo_lordo = $prezzo_netto + $iva_totale;

2. Validazione di un Form di Registrazione

Supponiamo di voler accettare una password solo se ha almeno 8 caratteri E contiene almeno un numero.

$password = "php12345";
$lunghezza_ok = (strlen($password) >= 8);
$contiene_numeri = preg_match('/[0-9]/', $password);

if ($lunghezza_ok && $contiene_numeri) {
    echo "Password valida.";
} else {
    echo "La password deve essere di almeno 8 caratteri e contenere un numero.";
}

3. Gestione dei Ruoli Utente (RBAC)

Gli operatori logici sono essenziali per definire chi può fare cosa.

$ruolo = 'editor';
$stato_articolo = 'bozza';

// Solo l'admin può pubblicare bozze, l'editor può solo modificarle
if ($ruolo === 'admin' || ($ruolo === 'editor' && $stato_articolo === 'bozza')) {
    echo "Hai i permessi per modificare questo contenuto.";
}

Errori Comuni e FAQ

Confusione tra = e ==

L'errore più frequente per i principianti è usare l'operatore di assegnazione = all'interno di un'istruzione if.

  • Sbagliato: if ($utente = "Mario") $
    ightarrow$ Questo assegna "Mario" alla variabile $utente, e poiché la stringa non è vuota, l'espressione risulterà sempre true.
  • Corretto: if ($utente == "Mario") $
    ightarrow$ Questo confronta il valore della variabile con la stringa.

L'ordine di precedenza

Proprio come in matematica, l'operatore di moltiplicazione * ha la precedenza sull'addizione +. In PHP, l'operatore && ha la precedenza su ||. Per evitare errori di logica, usate sempre le parentesi per rendere esplicito l'ordine di valutazione. Questo non solo evita bug, ma rende il codice molto più leggibile per gli altri sviluppatori.

Divisione per zero

Attenzione: dividere un numero per zero in PHP genera un errore di tipo DivisionByZeroError (nelle versioni recenti) o un warning. Prima di ogni divisione, è buona pratica verificare che il denominatore non sia zero:

if ($divisore != 0) {
    $risultato = $dividendo / $divisore;
} else {
    echo "Errore: Divisione per zero non permessa.";
}

Prossimi Passi

Ora che padroneggiate gli operatori, avete gli strumenti per creare la logica di base di qualsiasi applicazione. Ma come possiamo rendere queste decisioni più strutturate?

Nelle prossime lezioni approfondiremo:

  1. Le strutture di controllo condizionali: Impareremo a usare if, else, elseif e l'istruzione switch per gestire flussi di programma complessi.
  2. I Cicli (Loops): Vedremo come ripetere un'operazione più volte usando for, while e foreach, dove gli operatori di incremento (++) saranno i protagonisti.

Per fare pratica, provate a scrivere un piccolo script che calcoli l'indice di massa corporea (IMC) di una persona, utilizzando operatori aritmetici per il calcolo e operatori di confronto per determinare se la persona è sottopeso, normopeso o sovrappeso.