PHP e Python sono entrambi linguaggi dinamici e interpretati, ma sono cresciuti per lavori diversi. PHP è nato per il web: ogni richiesta esegue un file .php che stampa una pagina, ed è alla base di WordPress e Laravel. Python è generico: fa girare anche siti web (Django, Flask), ed è la scelta predefinita per data science, scripting e machine learning. Per un sito o un lavoro su WordPress, PHP è la strada diretta; per quasi tutto il resto, Python è la scelta più comune.
Il modo più rapido per confrontarli è lo stesso programma in entrambi. Ecco un piccolo script in PHP, che puoi eseguire:
E lo stesso programma in Python:
scores = {"Ada": 92, "Linus": 78, "Grace": 85}
for name, score in scores.items():
grade = "pass" if score >= 80 else "retry"
print(f"{name}: {score} ({grade})")
average = sum(scores.values()) / len(scores)
print(f"Average: {round(average, 1)}")
La logica è identica. Le differenze visibili sono di sintassi: PHP segna le variabili con $, termina le istruzioni con ; e usa le graffe per i blocchi; Python usa l'indentazione e nessun simbolo davanti ai nomi.
Sintassi a confronto
| Operazione | PHP | Python |
|---|---|---|
| Variabile | $count = 5; | count = 5 |
| Unire stringhe | "Hi " . $name | "Hi " + name |
| Inserire una variabile | "Hi $name" | f"Hi {name}" |
| Lista | [1, 2, 3] | [1, 2, 3] |
| Mappa chiave/valore | ["a" => 1] | {"a": 1} |
| Lunghezza | count($list), strlen($s) | len(list), len(s) |
| Ciclo su una mappa | foreach ($m as $k => $v) | for k, v in m.items(): |
| Funzione | function add($a, $b) { return $a + $b; } | def add(a, b): return a + b |
| Funzione anonima | fn($x) => $x * 2 | lambda x: x * 2 |
| Valore di ripiego per chiave mancante | $m["k"] ?? "default" | m.get("k", "default") |
| Uguaglianza stretta | === | == (nessuna conversione di tipo) |
Array: un solo tipo in PHP, liste e dict in Python
Python distingue liste, dict, tuple e set. PHP ha un solo tipo di array, una mappa ordinata, che fa tutti questi lavori. Le chiavi possono essere interi o stringhe, e l'ordine di inserimento viene mantenuto:
La versione Python richiede due tipi diversi:
colors = ["red", "green", "blue"]
codes = {"red": "#f00", "blue": "#00f"}
colors.append("yellow")
codes["green"] = "#0f0"
print("blue" in colors)
print("red" in codes)
Il tipo unico di PHP è comodo, ma porta una sorpresa che Python non ha: funzioni come array_filter mantengono le chiavi originali, quindi una lista filtrata può avere dei buchi (0, 2, 3). Avvolgi il risultato in array_values() per rinumerarla.
Tipi e conversione automatica
Entrambi i linguaggi sono a tipizzazione dinamica, ed entrambi permettono di aggiungere type hint. La grande differenza è cosa succede quando i tipi si mescolano. Python si rifiuta di sommare una stringa e un numero; PHP converte per te le stringhe numeriche:
print("10" + 5) # TypeError: can only concatenate str (not "int") to str
print(7 / 2) # 3.5
print(7 // 2) # 3
PHP 8 ha reso molto più sensati i confronti tra stringhe e numeri, ma l'abitudine da prendere è la stessa: usa === in PHP a meno che tu non voglia la conversione. Con declare(strict_types=1); in cima a un file, PHP rifiuta anche i tipi scalari sbagliati passati a parametri tipizzati, il che lo avvicina al comportamento dei type checker di Python.
Sviluppo web
È qui che i due differiscono di più. Un file PHP è già una pagina web: mettilo su un server, e ogni richiesta lo esegue dall'inizio, con i dati del form già in $_GET e $_POST. Esegui questo blocco, scrivi una città e premi Send: lo script gira di nuovo con $_POST compilato.
Python ha bisogno di un framework e di un application server in esecuzione per la stessa pagina. Una versione Flask minima:
from flask import Flask, request
from markupsafe import escape
app = Flask(__name__)
@app.route("/", methods=["GET", "POST"])
def home():
city = request.form.get("city", "").strip()
page = '<form method="post"><input name="city"><button>Send</button></form>'
if city:
page += f"<p>Weather lookup for <strong>{escape(city)}</strong></p>"
return page
Nessuno dei due modelli è migliore in assoluto. Il modello di PHP "una richiesta, un'esecuzione nuova" è semplice da pubblicare e difficile da rompere: un crash colpisce una richiesta sola, e la memoria viene liberata dopo ogni pagina. Il processo sempre attivo di Python può tenere dati in memoria tra le richieste ed è adatto a websocket e lavori in background, ma richiede più configurazione. I framework completi (Laravel e Symfony in PHP, Django in Python) finiscono per offrire funzionalità simili: routing, un ORM, template, autenticazione, code.
Prestazioni
Per le pagine web, PHP 8 con OPcache è in genere più rapido di CPython nell'eseguire codice semplice, e PHP 8 include anche un compilatore JIT. In pratica entrambi passano gran parte di una richiesta ad aspettare il database o altri servizi, quindi la differenza decide raramente un progetto. Per Python il discorso sulla velocità è diverso: il lavoro numerico pesante lo fanno librerie come NumPy e pandas, il cui nucleo è scritto in C, ed è per questo che Python domina nel lavoro sui dati nonostante un interprete più lento.
Dove si usa ciascuno
| PHP dà il meglio in | Python dà il meglio in |
|---|---|
| Siti, temi e plugin WordPress | Analisi dei dati (pandas, Jupyter) |
| App web Laravel e Symfony | Machine learning e IA (PyTorch, scikit-learn) |
| Negozi online: WooCommerce, Magento, Shopware | Automazione e scripting |
| Hosting condivisi economici, agenzie, siti da freelance | Calcolo scientifico, didattica |
| Pagine renderizzate sul server e API | Backend web con Django, Flask, FastAPI |
Il mercato del lavoro lo rispecchia. Le posizioni PHP sono per lo più sviluppo web, spesso WordPress o Laravel. Le posizioni Python spaziano tra web, dati, DevOps e ML, quindi sono di più.
Quale imparare prima
Scegli in base a cosa vuoi costruire nei prossimi mesi:
- Vuoi costruire siti web, lavorare da freelance o con WordPress: impara PHP. Avrai presto una pagina online, e le competenze si traducono direttamente in lavoro pagato. Inizia da cos'è PHP e dalle variabili.
- Vuoi analisi dei dati, automazione, IA o un primo linguaggio generico: impara Python.
- Vuoi costruire app web moderne da cima a fondo: per il backend vanno bene entrambi, e per il browser ti servirà comunque JavaScript; vedi PHP vs JavaScript.
Quasi tutto ciò che impari si trasferisce. Cicli, funzioni, array e mappe, classi ed eccezioni funzionano quasi allo stesso modo in entrambi, quindi il secondo linguaggio richiede settimane, non mesi.
Domande frequenti
PHP è più veloce di Python?
Per le tipiche richieste web PHP 8 di solito è più veloce di CPython, grazie a OPcache e a un motore rapido, ma entrambi sono abbastanza veloci da far sì che siano il database e la rete a decidere la maggior parte dei tempi di risposta. Per i calcoli numerici Python di norma passa il lavoro a librerie scritte in C, come NumPy.
Devo imparare prima PHP o Python?
Impara prima Python se vuoi programmazione generica, analisi dei dati, automazione o machine learning. Impara prima PHP se il tuo obiettivo sono siti web, lavori su WordPress o app Laravel, perché puoi costruire e pubblicare una pagina funzionante su quasi qualsiasi hosting.
Python può sostituire PHP nello sviluppo web?
Sì, Django, Flask e FastAPI costruiscono lo stesso tipo di siti e API. La differenza sta nel deploy e nell'ecosistema: PHP gira su quasi ogni hosting condiviso e ha WordPress, mentre le app web Python di solito girano come application server sempre attivo dietro un proxy.
Qual è l'equivalente PHP di un dizionario Python?
Un array associativo: $user = ['name' => 'Ada', 'age' => 36]; e $user['name']. Gli array PHP sono mappe ordinate, quindi lo stesso tipo fa da list e da dict di Python.