PHP et Python sont deux langages dynamiques et interprétés, mais ils ont grandi pour des usages différents. PHP a été conçu pour le web : chaque requête exécute un fichier .php qui affiche une page, et il fait tourner WordPress et Laravel. Python est généraliste : il sert aussi à faire des sites (Django, Flask), et c'est le choix par défaut pour la data science, les scripts et le machine learning. Pour un site ou une mission WordPress, PHP est la voie directe ; pour presque tout le reste, Python est le choix le plus courant.
Le moyen le plus rapide de les comparer est d'écrire le même programme dans les deux. Voici un petit script en PHP, que vous pouvez exécuter :
Et le même programme en 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 logique est identique. Les différences visibles tiennent à la syntaxe : PHP marque les variables avec $, termine les instructions par ; et utilise des accolades pour les blocs ; Python utilise l'indentation et aucun sigil.
La syntaxe côte à côte
| Tâche | PHP | Python |
|---|---|---|
| Variable | $count = 5; | count = 5 |
| Concaténer des chaînes | "Hi " . $name | "Hi " + name |
| Insérer une variable | "Hi $name" | f"Hi {name}" |
| Liste | [1, 2, 3] | [1, 2, 3] |
| Map clé/valeur | ["a" => 1] | {"a": 1} |
| Longueur | count($list), strlen($s) | len(list), len(s) |
| Parcourir une map | foreach ($m as $k => $v) | for k, v in m.items(): |
| Fonction | function add($a, $b) { return $a + $b; } | def add(a, b): return a + b |
| Fonction anonyme | fn($x) => $x * 2 | lambda x: x * 2 |
| Valeur par défaut si la clé manque | $m["k"] ?? "default" | m.get("k", "default") |
| Égalité stricte | === | == (pas de conversion de type) |
Les tableaux : un seul type en PHP, des listes et des dicts en Python
Python distingue listes, dicts, tuples et ensembles. PHP a un seul type de tableau, une map ordonnée, qui fait tous ces travaux. Les clés peuvent être des entiers ou des chaînes, et l'ordre d'insertion est conservé :
La version Python a besoin de deux types différents :
colors = ["red", "green", "blue"]
codes = {"red": "#f00", "blue": "#00f"}
colors.append("yellow")
codes["green"] = "#0f0"
print("blue" in colors)
print("red" in codes)
Le type unique de PHP est pratique, mais il réserve une surprise que Python n'a pas : des fonctions comme array_filter conservent les clés d'origine, donc une liste filtrée peut avoir des trous (0, 2, 3). Entourez le résultat d'array_values() pour le renuméroter.
Types et conversions implicites
Les deux langages sont typés dynamiquement, et les deux permettent d'ajouter des indications de type. La grande différence est ce qui se passe quand les types se mélangent. Python refuse d'additionner une chaîne et un nombre ; PHP convertit pour vous les chaînes numériques :
print("10" + 5) # TypeError: can only concatenate str (not "int") to str
print(7 / 2) # 3.5
print(7 // 2) # 3
PHP 8 a rendu les comparaisons entre chaînes et nombres bien plus raisonnables, mais le bon réflexe reste le même : utilisez === en PHP sauf si vous voulez une conversion. Avec declare(strict_types=1); en haut d'un fichier, PHP refuse aussi les mauvais types scalaires passés à des paramètres typés, ce qui le rapproche du comportement des vérificateurs de types de Python.
Le développement web
C'est là que les deux diffèrent le plus. Un fichier PHP est une page web telle quelle : déposez-le sur un serveur, et chaque requête l'exécute depuis le début, avec les données du formulaire déjà dans $_GET et $_POST. Exécutez ce bloc, tapez une ville et cliquez sur Send : le script s'exécute à nouveau avec $_POST rempli.
Python a besoin d'un framework et d'un serveur d'application en marche pour la même page. Une version Flask minimale :
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
Aucun modèle n'est meilleur dans l'absolu. Le principe « une requête, une exécution neuve » de PHP est simple à déployer et difficile à casser : un plantage n'affecte qu'une requête, et la mémoire est libérée après chaque page. Le processus permanent de Python peut garder des données en mémoire entre les requêtes et convient aux websockets et aux tâches de fond, mais demande plus de configuration. Les frameworks complets (Laravel et Symfony en PHP, Django en Python) finissent par offrir des fonctions similaires : routage, ORM, templates, authentification, files d'attente.
Les performances
Pour des pages web, PHP 8 avec OPcache exécute généralement du code simple plus vite que CPython, et PHP 8 inclut aussi un compilateur JIT. En pratique, les deux passent l'essentiel d'une requête à attendre la base de données ou d'autres services, donc la différence décide rarement d'un projet. Côté Python, la vitesse vient d'ailleurs : le calcul numérique lourd est fait par des bibliothèques comme NumPy et pandas, dont le cœur est écrit en C, et c'est pourquoi Python domine le travail sur les données malgré un interpréteur plus lent.
Où chacun est utilisé
| PHP est le plus fort pour | Python est le plus fort pour |
|---|---|
| Les sites, thèmes et plugins WordPress | L'analyse de données (pandas, Jupyter) |
| Les applications web Laravel et Symfony | Le machine learning et l'IA (PyTorch, scikit-learn) |
| Les boutiques : WooCommerce, Magento, Shopware | L'automatisation et les scripts |
| Les hébergements mutualisés pas chers, les agences, les sites de freelances | Le calcul scientifique, l'enseignement |
| Les pages rendues côté serveur et les API | Les backends web avec Django, Flask, FastAPI |
Le marché de l'emploi le reflète. Les postes PHP relèvent surtout du développement web, souvent WordPress ou Laravel. Les postes Python couvrent le web, la data, le DevOps et le ML, et sont donc plus nombreux.
Lequel apprendre en premier
Choisissez selon ce que vous voulez construire dans les prochains mois :
- Vous voulez créer des sites, travailler en freelance ou sur WordPress : apprenez PHP. Vous aurez rapidement une page en ligne, et les compétences correspondent directement à du travail rémunéré. Commencez par ce qu'est PHP et les variables.
- Vous voulez faire de l'analyse de données, de l'automatisation, de l'IA, ou apprendre un premier langage généraliste : apprenez Python.
- Vous voulez construire des applications web modernes de bout en bout : les deux conviennent pour le backend, et vous aurez de toute façon besoin de JavaScript pour le navigateur ; voir PHP vs JavaScript.
L'essentiel de ce que vous apprenez se transpose. Boucles, fonctions, tableaux et maps, classes et exceptions fonctionnent presque de la même façon dans les deux, donc le second langage prend des semaines, pas des mois.
Questions fréquentes
PHP est-il plus rapide que Python ?
Pour des requêtes web classiques, PHP 8 est en général plus rapide que CPython grâce à OPcache et à un moteur rapide, mais les deux sont assez rapides pour que la base de données et le réseau décident de l'essentiel du temps de réponse. Pour le calcul numérique, Python confie normalement le travail à des bibliothèques écrites en C, comme NumPy.
Faut-il apprendre PHP ou Python en premier ?
Commencez par Python si vous visez la programmation en général, l'analyse de données, l'automatisation ou le machine learning. Commencez par PHP si votre objectif est de créer des sites, de travailler sur WordPress ou de développer des applications Laravel, car vous pouvez construire et mettre en ligne une page qui fonctionne sur presque n'importe quel hébergeur.
Python peut-il remplacer PHP pour le développement web ?
Oui, Django, Flask et FastAPI construisent les mêmes types de sites et d'API. La différence tient au déploiement et à l'écosystème : PHP tourne sur presque tous les hébergements mutualisés et dispose de WordPress, alors que les applications web Python tournent en général comme un serveur d'application permanent derrière un proxy.
Quel est l'équivalent PHP d'un dictionnaire Python ?
Un tableau associatif : $user = ['name' => 'Ada', 'age' => 36]; et $user['name']. Les tableaux PHP sont des maps ordonnées, donc le même type remplace à la fois la liste et le dict de Python.