HTML CSS JAVASCRIPT SQL MYSQL PYTHON JAVA PHP C C++ C# PACKET TRACER CYBERSECURITY REACTTYPESCRIPTNODE.JSGIT & GITHUBDATA SCIENCEBOOTSTRAPGOKOTLINJQUERYDJANGOVUEANGULAR MONGODB POSTGRESQL SASS NUMPY PANDAS SCIPY DSA RUST SWIFT BASHXMLW3.CSSANGULARJSAIAWSPROGRAMMAZIONEEXCEL WORD POWERPOINT
Corso gratuito

Corso di PHP in italiano

Il tutorial completo per imparare PHP da zero: il linguaggio lato server più usato per costruire siti web dinamici, gestire form e database. Esempi spiegati passo passo.

Introduzione a PHP

PHP (PHP: Hypertext Preprocessor) è un linguaggio di scripting lato server creato nel 1994, pensato appositamente per lo sviluppo web. Gira sul server: il codice viene eseguito lì e al browser arriva solo il risultato in HTML. È il motore di WordPress, Wikipedia, Facebook (alle origini) e di gran parte del web.

Con PHP puoi creare siti dinamici, gestire i dati inviati dai form, dialogare con database come MySQL, gestire login, sessioni e cookie. È facile da imparare e si integra direttamente nell'HTML.

📌 PHP non si esegue nel browser: ha bisogno di un server con interprete PHP (es. XAMPP in locale, oppure un hosting). In questo corso gli esempi si leggono e si modificano con la sintassi colorata.
Esempio

Installare PHP (Get Started)

Il modo più semplice per provare PHP sul tuo computer è installare XAMPP (o MAMP/WAMP): un pacchetto che include il server Apache, PHP e MySQL. I file PHP (estensione .php) vanno messi nella cartella htdocs e si aprono dal browser all'indirizzo http://localhost/file.php.

💡 In alternativa, ogni hosting web (Aruba, SiteGround, Altervista...) supporta PHP: carichi i file via FTP e funzionano subito.

La sintassi di PHP

Il codice PHP si scrive tra i tag <?php e ?> e può essere inserito ovunque dentro una pagina HTML. Ogni istruzione termina con il punto e virgola ;.

Esempio

Stampare: echo e print

echo e print mostrano contenuti nella pagina. echo è leggermente più veloce e può stampare più valori separati da virgola.

Esempio

I commenti

PHP supporta commenti su una riga con // o #, e su più righe con /* ... */.

Esempio

Le variabili

In PHP le variabili iniziano sempre con il simbolo dollaro $. Non serve dichiarare il tipo: viene dedotto dal valore. Sono case-sensitive.

Esempio

I tipi di dato

I tipi principali in PHP sono: string (testo), int (interi), float (decimali), bool (true/false), array, object e NULL. La funzione gettype() mostra il tipo.

Esempio

Le stringhe

Le stringhe si concatenano con il punto . e offrono molte funzioni: strlen(), strtoupper(), str_replace(), substr().

Esempio

Numeri e funzioni matematiche

PHP gestisce interi e decimali e offre funzioni matematiche come abs(), round(), sqrt(), pow(), rand().

Esempio

Le costanti

Una costante è un valore che non cambia. Si definisce con define() o con const e, per convenzione, si scrive in MAIUSCOLO. Non usa il $.

Esempio

Gli operatori

PHP offre operatori aritmetici (+ - * / %), di confronto (== === != > <) e logici (&& || !). Attenzione: == confronta i valori, === confronta valore E tipo.

Esempio

Le condizioni: if, elseif, else

Eseguono codice diverso a seconda di una condizione. Esiste anche l'operatore ternario ?: per le scelte rapide.

Esempio

Il costrutto switch

Lo switch confronta una variabile con più casi, alternativa più leggibile a tanti elseif.

Esempio

Il ciclo while

Il while ripete un blocco finché la condizione è vera.

Esempio

Il ciclo for

Il for è adatto quando conosci il numero di ripetizioni.

Esempio

Le funzioni

Una funzione raggruppa codice riutilizzabile. Si definisce con function, può avere parametri (anche con valore di default) e restituire un valore con return.

Esempio

Gli array

Un array contiene più valori. In quello indicizzato si accede con un numero (da 0). Si crea con array() o [].

Esempio

Gli array associativi

Negli array associativi ogni valore ha una chiave testuale, come un dizionario. Perfetti per rappresentare dati strutturati.

Esempio

Il ciclo foreach

Il foreach scorre tutti gli elementi di un array, anche associativo (con chiave e valore).

Esempio

Le date

La funzione date() formatta la data e l'ora correnti del server secondo uno schema di caratteri (Y = anno, m = mese, d = giorno, H:i:s = ora).

Esempio

Include e require

include e require inseriscono il contenuto di un altro file PHP: utilissimi per riusare header, footer e menu su tutte le pagine. La differenza: se il file manca, require blocca lo script, include dà solo un avviso.

Esempio

Espressione match

Introdotto in PHP 8, match è una versione moderna e più sicura di switch: usa il confronto stretto (===), restituisce un valore e non richiede break.

Esempio
💡 A differenza di switch, match non ha "fall-through" e confronta i tipi: match("1") non corrisponde a 1.

Costanti magiche

Le costanti magiche sono costanti predefinite che cambiano valore a seconda di dove vengono usate. Sono utilissime per il debug e il logging.

CostanteDescrizione
__LINE__Numero della riga corrente
__FILE__Percorso completo del file
__DIR__Cartella del file
__FUNCTION__Nome della funzione corrente
__CLASS__Nome della classe corrente
__METHOD__Nome del metodo corrente
__NAMESPACE__Namespace corrente
Esempio

Espressioni regolari (RegEx)

Le espressioni regolari permettono di cercare, validare e sostituire testo secondo pattern. PHP usa la sintassi PCRE con le funzioni preg_*.

FunzioneUso
preg_match()Cerca la prima corrispondenza
preg_match_all()Cerca tutte le corrispondenze
preg_replace()Sostituisce le corrispondenze
preg_split()Divide una stringa con un pattern
Esempio

Gestire i form: $_POST

PHP riceve i dati inviati da un form HTML tramite le superglobali $_POST (metodo POST) e $_GET (metodo GET). Il valore di name di ogni campo diventa la chiave.

Esempio

I parametri nell'URL: $_GET

Con il metodo GET i dati viaggiano nell'URL (es. pagina.php?id=5) e si leggono da $_GET. È adatto a ricerche e link, ma non a dati sensibili (sono visibili nell'URL).

Esempio

La validazione dei dati

Non fidarti mai dei dati dell'utente! Vanno sempre controllati e ripuliti per sicurezza. Funzioni utili: empty(), isset(), htmlspecialchars() (contro gli attacchi XSS) e filter_var() per validare email.

Esempio

Campi obbligatori nei form

Per rendere obbligatori alcuni campi, in PHP si verifica che non siano vuoti e si mostra un messaggio d'errore accanto al campo mancante.

Esempio
🔒 Usa sempre htmlspecialchars() sui dati dell'utente per prevenire attacchi XSS (Cross-Site Scripting).

Validare URL ed E-mail

PHP fornisce i filtri filter_var() per validare facilmente email, URL, interi e altri formati comuni.

Esempio

Form completo: esempio pratico

Un modulo di contatto completo che combina validazione, campi obbligatori, controllo email e protezione XSS — uno schema riutilizzabile per progetti reali.

Form di contatto

Sessioni e cookie

Le sessioni conservano dati lato server tra una pagina e l'altra (es. per il login). I cookie salvano dati nel browser dell'utente. Una sessione si avvia con session_start() e si usa l'array $_SESSION.

Esempio

Gestione file in PHP

PHP può leggere, scrivere e manipolare file sul server. Le funzioni principali sono fopen(), fread(), fwrite() e fclose().

ModalitàSignificato
rLettura, dall'inizio
wScrittura, cancella il contenuto esistente
aAppend, aggiunge in coda
xCrea un nuovo file (errore se esiste)
r+Lettura e scrittura

Aprire e leggere file

Per leggere un intero file la via più rapida è file_get_contents(). Per leggere riga per riga si usa fopen() + fgets().

Esempio

Creare e scrivere file

Con fwrite() si scrive su un file aperto in modalità w (sovrascrive) o a (aggiunge). La scorciatoia file_put_contents() fa tutto in una riga.

Esempio

Upload di file

PHP gestisce l'upload tramite la superglobale $_FILES. Il form HTML deve avere enctype="multipart/form-data".

Esempio
🔒 Controlla sempre estensione e dimensione del file caricato, e salva in una cartella non eseguibile per evitare upload di codice malevolo.

Filtri PHP

I filtri (filter_var()) validano e sanificano i dati. Sono fondamentali per gestire in sicurezza gli input dell'utente.

FiltroUso
FILTER_VALIDATE_EMAILValida un'email
FILTER_VALIDATE_URLValida un URL
FILTER_VALIDATE_INTValida un intero
FILTER_VALIDATE_FLOATValida un numero decimale
FILTER_SANITIZE_EMAILRimuove caratteri non validi da un'email
FILTER_SANITIZE_SPECIAL_CHARSCodifica caratteri speciali HTML
Esempio

Funzioni callback

Una callback è una funzione passata come argomento a un'altra funzione. Molte funzioni PHP (come array_map e usort) accettano callback.

Esempio

JSON in PHP

JSON è il formato standard per scambiare dati tra server e client (es. con JavaScript e API). PHP converte con json_encode() e json_decode().

Esempio
💡 Con il secondo parametro true, json_decode() restituisce un array associativo invece di un oggetto.

Gestione delle eccezioni

Le eccezioni gestiscono gli errori in modo controllato con i blocchi try, catch e finally, senza interrompere bruscamente il programma.

Esempio

OOP: classi e oggetti

PHP supporta la programmazione a oggetti. Una classe definisce proprietà e metodi; con new si crea un oggetto. Il costruttore __construct() inizializza l'oggetto; $this indica l'oggetto corrente.

Esempio

Classi, oggetti e proprietà

Una classe è il modello da cui si creano gli oggetti. Le proprietà sono le variabili della classe, i metodi le sue funzioni. Si accede con l'operatore ->.

Esempio

Costruttore e distruttore

Il costruttore __construct() viene chiamato automaticamente alla creazione dell'oggetto. Il distruttore __destruct() quando l'oggetto viene eliminato.

Esempio
💡 Da PHP 8 puoi usare la constructor property promotion: public function __construct(private string $nome) {} dichiara e assegna la proprietà in una riga.

Modificatori d'accesso

I modificatori d'accesso controllano la visibilità di proprietà e metodi (incapsulamento).

ModificatoreAccessibile da
publicOvunque (default)
protectedSolo dalla classe e dalle sottoclassi
privateSolo dalla classe stessa
Esempio

L'ereditarietà

Con extends una classe eredita proprietà e metodi da un'altra. I modificatori public, private e protected controllano la visibilità (incapsulamento).

Esempio

Classi astratte

Una classe astratta (abstract) non può essere istanziata: serve da modello per le sottoclassi. I metodi astratti definiscono solo la firma, l'implementazione è obbligatoria nelle classi figlie.

Esempio

Interfacce

Un'interfaccia definisce un contratto: un insieme di metodi che le classi devono implementare. Una classe può implementare più interfacce con implements.

Esempio

Traits

I traits permettono di riutilizzare gruppi di metodi in più classi, superando il limite dell'ereditarietà singola di PHP.

Esempio

Metodi e proprietà statiche

I membri static appartengono alla classe, non agli oggetti. Si accede con l'operatore :: senza creare un'istanza.

Esempio

Namespace

I namespace organizzano il codice ed evitano i conflitti di nome tra classi/funzioni con lo stesso nome (es. provenienti da librerie diverse).

Esempio
💡 I namespace sono la base dell'autoloading PSR-4 usato da Composer, il gestore di pacchetti standard di PHP.

Iterables e generatori

Un iterable è qualsiasi cosa percorribile con foreach (array o oggetti Traversable). I generatori (yield) producono valori on-demand, risparmiando memoria.

Esempio

PHP e MySQL

La combinazione PHP + MySQL è alla base dei siti dinamici: PHP si connette al database, esegue query e mostra i risultati. Il modo moderno e sicuro è PDO, che protegge dalle SQL injection con i prepared statement.

Esempio
🔒 Usa sempre i prepared statement (i ? al posto dei valori): inserire variabili direttamente nella query apre la porta agli attacchi di SQL injection.

Creare database e tabelle

Con PDO puoi eseguire qualsiasi comando SQL, inclusi CREATE DATABASE e CREATE TABLE.

Esempio

Inserire dati

Per inserire dati in modo sicuro si usano i prepared statement, che separano la query dai valori prevenendo le SQL injection.

Esempio

Leggere dati

La query SELECT recupera i dati. Con fetch() leggi una riga, con fetchAll() tutte le righe.

Esempio

Aggiornare ed eliminare dati

UPDATE modifica i record esistenti, DELETE li elimina. Usa sempre WHERE per non agire su tutta la tabella!

Esempio
🔒 Dimenticare WHERE in un UPDATE o DELETE modifica/cancella tutti i record. Verifica sempre la condizione prima di eseguire.

Leggere XML con SimpleXML

SimpleXML è il modo più semplice per leggere documenti XML in PHP, trasformandoli in oggetti navigabili.

Esempio

AJAX con PHP

AJAX permette di scambiare dati con il server senza ricaricare la pagina. JavaScript invia una richiesta a uno script PHP, che risponde (spesso in JSON).

Lato server: api.php

Lato client, JavaScript moderno usa fetch():

fetch("api.php?nome=Luca")
  .then(res => res.json())
  .then(dati => console.log(dati.messaggio));

Esempi pratici PHP

Esempi completi e riutilizzabili per consolidare PHP nel contesto web reale.

Contatore di visite con file

Esempio

Tabella HTML dinamica da array

Esempio

Editor online PHP

Scrivi e leggi codice PHP con la sintassi colorata. Per eseguirlo installa XAMPP, salva come pagina.php nella cartella htdocs e apri http://localhost/pagina.php.

Il tuo codice PHP

Quiz PHP — verifica le tue conoscenze

Rispondi mentalmente, poi controlla la soluzione.

  1. Qual è la differenza tra echo e print?
    Risposta: Entrambi stampano, ma echo può accettare più argomenti ed è leggermente più veloce; print restituisce sempre 1, quindi può essere usato in espressioni.
  2. Cosa significa che PHP è "loosely typed"?
    Risposta: Le variabili non hanno un tipo fisso: PHP lo deduce dal valore e può convertirlo automaticamente (type juggling).
  3. Differenza tra == e ===?
    Risposta: == confronta solo il valore (con conversione di tipo); === confronta valore E tipo (confronto stretto).
  4. Cos'è una superglobale?
    Risposta: Un array predefinito accessibile ovunque, come $_POST, $_GET, $_SESSION, $_SERVER.
  5. Perché usare i prepared statement?
    Risposta: Separano la query dai dati, prevenendo le SQL injection e migliorando le prestazioni con query ripetute.

Esercizi PHP con soluzioni

Cinque esercizi con soluzione completa. Provaci prima di guardare!

Esercizio 1 — FizzBuzz

Soluzione

Esercizio 2 — Conta vocali

Soluzione

Esercizio 3 — Array associativo e media

Soluzione

Esercizio 4 — Palindromo

Soluzione

Esercizio 5 — Classe Carrello

Soluzione

Sfide PHP

  1. 🟢 Crea un generatore di password casuali con lunghezza e caratteri configurabili.
  2. 🟡 Realizza un sistema di login completo con sessioni e password hashate (password_hash/password_verify).
  3. 🟡 Costruisci un mini-blog con CRUD completo (crea, leggi, aggiorna, elimina) su database MySQL.
  4. 🔴 Implementa una semplice REST API in PHP che restituisce dati JSON con routing per metodo HTTP.
  5. 🔴 Crea un sistema di caricamento immagini con generazione di anteprime (thumbnail) usando la libreria GD.

Progetti pratici con PHP

  • 📝 Blog dinamico: articoli su MySQL con area admin protetta da login
  • 🛒 Mini e-commerce: catalogo prodotti, carrello con sessioni, checkout
  • 📋 To-Do list: gestione attività con database e filtri
  • 💬 Sistema di commenti: con validazione, protezione XSS e moderazione
  • 📧 Form di contatto: con invio email (PHPMailer) e salvataggio messaggi
  • 🔐 Sistema di autenticazione: registrazione, login, recupero password, ruoli utente

Programma completo del corso PHP

ModuloArgomentiOre
1 — BasiInstallazione XAMPP, sintassi, echo, variabili, tipi, operatori5
2 — ControlloIf/else, switch, match, while, for, funzioni5
3 — DatiStringhe, numeri, array, array associativi, foreach, date6
4 — Form$_POST, $_GET, validazione, sicurezza, form completo5
5 — AvanzatoSessioni, cookie, file, filtri, JSON, eccezioni, RegEx6
6 — OOPClassi, costruttori, ereditarietà, interfacce, traits, namespace8
7 — DatabasePDO, MySQL, CRUD, prepared statement7
8 — Web modernoXML, AJAX, REST API, progetto finale8

Piano di studio PHP (8 settimane)

SettimanaObiettivo
1Installazione XAMPP, sintassi, variabili, tipi, operatori, echo/print
2Strutture di controllo: if/else, switch, match, cicli, funzioni
3Stringhe, numeri, array, array associativi, foreach, date
4Form: $_POST/$_GET, validazione, sicurezza XSS, form completo
5Sessioni, cookie, gestione file, filtri, JSON, eccezioni
6OOP: classi, costruttori, ereditarietà, interfacce, traits, namespace
7MySQL con PDO: connessione, CRUD, prepared statement
8XML, AJAX, REST API — progetto finale

Domande da colloquio PHP

  • 💬 Differenza tra include e require?require blocca lo script con errore fatale se il file manca; include emette solo un warning e continua.
  • 💬 Cos'è il type juggling? — La conversione automatica di tipo che PHP applica nei confronti e nelle operazioni. Per evitarne le insidie usa ===.
  • 💬 Come si prevengono le SQL injection? — Usando prepared statement con PDO o MySQLi, mai concatenando input nelle query.
  • 💬 Cosa fa password_hash()? — Genera un hash sicuro (bcrypt/Argon2) della password, da verificare con password_verify(). Mai salvare password in chiaro.
  • 💬 Differenza tra sessioni e cookie? — Le sessioni salvano i dati sul server (più sicure); i cookie li salvano nel browser dell'utente.
  • 💬 Cos'è Composer? — Il gestore di dipendenze standard di PHP, usato per installare librerie e gestire l'autoloading PSR-4.

Riferimento — Funzioni String

FunzioneDescrizioneEsempio
strlen()Lunghezza stringastrlen("PHP") → 3
strtoupper()Maiuscolostrtoupper("php") → "PHP"
strtolower()Minuscolostrtolower("PHP") → "php"
ucfirst()Prima lettera maiuscolaucfirst("ciao") → "Ciao"
trim()Rimuove spazi ai latitrim(" hi ") → "hi"
str_replace()Sostituisce testostr_replace("a","o","casa") → "coso"
substr()Sottostringasubstr("PHP",0,2) → "PH"
strpos()Posizione di una sottostringastrpos("PHP","H") → 1
str_contains()Contiene? (PHP 8+)str_contains("PHP","H") → true
explode()Stringa → arrayexplode(",","a,b") → ["a","b"]
implode()Array → stringaimplode("-",["a","b"]) → "a-b"
strrev()Inverte la stringastrrev("abc") → "cba"
number_format()Formatta numerinumber_format(1234.5,2) → "1,234.50"
sprintf()Stringa formattatasprintf("%.2f",3.1) → "3.10"

Riferimento — Funzioni Array

FunzioneDescrizione
count()Numero di elementi
array_push()Aggiunge in coda
array_pop()Rimuove l'ultimo elemento
array_shift()Rimuove il primo elemento
array_merge()Unisce più array
array_map()Applica una funzione a ogni elemento
array_filter()Filtra con una callback
array_keys()Restituisce le chiavi
array_values()Restituisce i valori
array_column()Estrae una colonna da array di array
in_array()Verifica se un valore esiste
array_search()Cerca un valore e ne dà la chiave
sort() / rsort()Ordina crescente / decrescente
asort() / arsort()Ordina mantenendo le chiavi
array_sum()Somma dei valori
array_unique()Rimuove i duplicati

Riferimento — Funzioni Math

FunzioneDescrizioneEsempio
abs()Valore assolutoabs(-5) → 5
ceil()Arrotonda per eccessoceil(4.1) → 5
floor()Arrotonda per difettofloor(4.9) → 4
round()Arrotondaround(3.456,2) → 3.46
sqrt()Radice quadratasqrt(16) → 4
pow()Potenzapow(2,10) → 1024
max() / min()Massimo / minimomax(3,7,2) → 7
rand()Numero casualerand(1,100)
intdiv()Divisione interaintdiv(10,3) → 3
pi() / M_PIPi grecopi() → 3.14159

Riferimento — Superglobali

SuperglobaleContenuto
$_GETDati passati nell'URL (querystring)
$_POSTDati inviati da un form con metodo POST
$_REQUESTGET, POST e COOKIE combinati
$_SESSIONDati di sessione lato server
$_COOKIECookie del browser
$_FILESFile caricati tramite form
$_SERVERInfo su server e richiesta HTTP
$_ENVVariabili d'ambiente
$GLOBALSTutte le variabili globali

Certificazione PHP

Le certificazioni PHP attestano le competenze e sono apprezzate dalle aziende che sviluppano in PHP:

CertificazioneEnteLivello
Zend Certified PHP Engineer (ZCPE)Zend / PerforceProfessionale (la più riconosciuta)
PHP CertificationW3SchoolsBase/Intermedio
Laravel CertificationLaravelFramework avanzato
Symfony CertificationSensioLabsFramework avanzato

Come prepararsi

  • 📚 Studia il manuale ufficiale PHP (php.net/manual)
  • 🧪 Pratica con progetti reali: blog, e-commerce, REST API
  • 🛠️ Impara un framework moderno: Laravel o Symfony
  • 📦 Padroneggia Composer e gli standard PSR
  • ⏱️ Tempo medio di preparazione ZCPE: 3-4 mesi

Conclusione — E ora?

Hai completato il corso di PHP! Hai imparato la sintassi, la gestione dei form, sessioni e cookie, il lavoro con i file, la programmazione a oggetti, i namespace, i traits e la connessione a MySQL con PDO. Sei pronto per costruire siti web dinamici reali.

E ora cosa fare?

  • 💻 Installa XAMPP ed esegui i tuoi script in locale su localhost
  • 🐙 Carica i progetti su GitHub per costruire il tuo portfolio
  • 🚀 Studia Laravel — il framework PHP più richiesto dalle aziende
  • 📦 Impara Composer e gli standard PSR per codice professionale
  • 🔐 Approfondisci la sicurezza: hashing password, protezione CSRF/XSS, validazione
  • 🎯 Punta alla certificazione ZCPE riconosciuta a livello internazionale
🎯 La tua sfida finale

Crea un mini-blog completo: pagina con elenco articoli da MySQL, form per aggiungere un articolo (con validazione e protezione XSS), e un'area admin protetta da login con sessioni e password hashate. Bonus: aggiungi un sistema di commenti.

✏️ Provalo tu — leggi e modifica il codice PHP
Anteprima