Menu

PHP vs Python: sintassi, uso nel web e quale imparare

PHP è fatto per il web: un file viene eseguito a ogni richiesta e stampa una pagina, ed è alla base di WordPress e Laravel. Python è un linguaggio generico che fa anche web (Django, Flask) e domina data science, automazione e machine learning.

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

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

OperazionePHPPython
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}
Lunghezzacount($list), strlen($s)len(list), len(s)
Ciclo su una mappaforeach ($m as $k => $v)for k, v in m.items():
Funzionefunction add($a, $b) { return $a + $b; }def add(a, b): return a + b
Funzione anonimafn($x) => $x * 2lambda 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 inPython dà il meglio in
Siti, temi e plugin WordPressAnalisi dei dati (pandas, Jupyter)
App web Laravel e SymfonyMachine learning e IA (PyTorch, scikit-learn)
Negozi online: WooCommerce, Magento, ShopwareAutomazione e scripting
Hosting condivisi economici, agenzie, siti da freelanceCalcolo scientifico, didattica
Pagine renderizzate sul server e APIBackend 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.

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA