PHP i Python to dynamiczne języki interpretowane, ale wyrosły do różnych zadań. PHP powstał dla WWW: każde żądanie uruchamia plik .php, który wypisuje stronę, a język napędza WordPressa i Laravela. Python jest językiem ogólnego przeznaczenia: też obsługuje strony (Django, Flask) i jest domyślnym wyborem w data science, skryptach i uczeniu maszynowym. Do strony WWW albo pracy z WordPressem PHP to prosta droga; do prawie wszystkiego innego częściej wybiera się Pythona.
Najszybciej porównasz je na tym samym programie w obu językach. Oto mały skrypt w PHP, który możesz uruchomić:
I ten sam program w Pythonie:
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)}")
Logika jest identyczna. Widoczne różnice dotyczą składni: PHP oznacza zmienne przez $, kończy instrukcje ; i używa nawiasów klamrowych dla bloków; Python używa wcięć i nie ma znaków przed nazwami zmiennych.
Składnia obok siebie
| Zadanie | PHP | Python |
|---|---|---|
| Zmienna | $count = 5; | count = 5 |
| Łączenie łańcuchów | "Hi " . $name | "Hi " + name |
| Wstawienie zmiennej | "Hi $name" | f"Hi {name}" |
| Lista | [1, 2, 3] | [1, 2, 3] |
| Mapa klucz/wartość | ["a" => 1] | {"a": 1} |
| Długość | count($list), strlen($s) | len(list), len(s) |
| Pętla po mapie | foreach ($m as $k => $v) | for k, v in m.items(): |
| Funkcja | function add($a, $b) { return $a + $b; } | def add(a, b): return a + b |
| Funkcja anonimowa | fn($x) => $x * 2 | lambda x: x * 2 |
| Wartość zastępcza dla brakującego klucza | $m["k"] ?? "default" | m.get("k", "default") |
| Ścisła równość | === | == (bez żonglowania typami) |
Tablice: jeden typ w PHP, listy i słowniki w Pythonie
Python rozdziela listy, słowniki, krotki i zbiory. PHP ma jeden typ tablicy, uporządkowaną mapę, który robi to wszystko. Kluczami mogą być liczby całkowite albo łańcuchy, a kolejność wstawiania jest zachowana:
Wersja w Pythonie potrzebuje dwóch różnych typów:
colors = ["red", "green", "blue"]
codes = {"red": "#f00", "blue": "#00f"}
colors.append("yellow")
codes["green"] = "#0f0"
print("blue" in colors)
print("red" in codes)
Jeden typ w PHP jest wygodny, ale przynosi niespodziankę, której Python nie ma: funkcje takie jak array_filter zachowują oryginalne klucze, więc przefiltrowana lista może mieć dziury (0, 2, 3). Opakuj wynik w array_values(), aby ponumerować go od nowa.
Typy i żonglowanie typami
Oba języki są typowane dynamicznie i oba pozwalają dodawać podpowiedzi typów. Duża różnica to zachowanie przy mieszaniu typów. Python odmawia dodania łańcucha do liczby; PHP sam konwertuje łańcuchy liczbowe:
print("10" + 5) # TypeError: can only concatenate str (not "int") to str
print(7 / 2) # 3.5
print(7 // 2) # 3
PHP 8 znacznie uporządkował porównania łańcuchów z liczbami, ale nawyk jest ten sam: w PHP używaj ===, chyba że chcesz konwersji. Z declare(strict_types=1); na początku pliku PHP odrzuca też złe typy skalarne przekazane do parametrów funkcji z typami, co zbliża go do zachowania narzędzi sprawdzających typy w Pythonie.
Tworzenie stron WWW
Tu oba języki różnią się najbardziej. Plik PHP sam w sobie jest stroną WWW: wrzuć go na serwer, a każde żądanie wykona go od góry, z danymi formularza już w $_GET i $_POST. Uruchom ten blok, wpisz miasto i kliknij Send: skrypt wykona się ponownie z wypełnionym $_POST.
Python potrzebuje do tej samej strony frameworka i działającego serwera aplikacji. Minimalna wersja we Flasku:
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
Żaden model nie jest ogólnie lepszy. W PHP zasada „jedno żądanie, jedno świeże uruchomienie” jest prosta we wdrożeniu i trudna do zepsucia: awaria dotyczy jednego żądania, a pamięć jest czyszczona po każdej stronie. Długo działający proces aplikacji w Pythonie może trzymać dane w pamięci między żądaniami i pasuje do websocketów i pracy w tle, ale wymaga więcej konfiguracji. Pełne frameworki (Laravel i Symfony w PHP, Django w Pythonie) ostatecznie oferują podobne funkcje: routing, ORM, szablony, uwierzytelnianie, kolejki.
Wydajność
Przy stronach WWW PHP 8 z OPcache zwykle szybciej wykonuje zwykły kod niż CPython, a PHP 8 ma też kompilator JIT. W praktyce oba spędzają większość żądania na czekaniu na bazę danych lub inne usługi, więc ta różnica rzadko przesądza o projekcie. W Pythonie wydajność wygląda inaczej: ciężkie obliczenia numeryczne wykonują biblioteki takie jak NumPy i pandas, których rdzenie są napisane w C, i dlatego Python prowadzi w pracy z danymi mimo wolniejszego interpretera.
Gdzie używa się każdego z nich
| PHP jest najmocniejszy w | Python jest najmocniejszy w |
|---|---|
| Strony, motywy i wtyczki WordPressa | Analiza danych (pandas, Jupyter) |
| Aplikacje webowe w Laravelu i Symfony | Uczenie maszynowe i AI (PyTorch, scikit-learn) |
| Sklepy: WooCommerce, Magento, Shopware | Automatyzacja i skrypty |
| Tani hosting współdzielony, agencje, strony freelance | Obliczenia naukowe, nauczanie |
| Strony renderowane na serwerze i API | Backendy webowe w Django, Flask, FastAPI |
Rynek pracy to odzwierciedla. Oferty PHP to głównie tworzenie stron, często WordPress albo Laravel. Oferty Pythona obejmują web, dane, DevOps i ML, więc jest ich więcej.
Czego uczyć się najpierw
Wybierz według tego, co chcesz zbudować w najbliższych miesiącach:
- Chcesz budować strony, pracować jako freelancer albo z WordPressem: ucz się PHP. Szybko postawisz stronę w sieci, a umiejętności przekładają się wprost na płatną pracę. Zacznij od tego, czym jest PHP, i od zmiennych.
- Chcesz analizy danych, automatyzacji, AI albo ogólnego pierwszego języka: ucz się Pythona.
- Chcesz budować nowoczesne aplikacje webowe od początku do końca: na backend nada się każdy z nich, a do przeglądarki i tak potrzebujesz JavaScriptu; zobacz PHP vs JavaScript.
Większość tego, czego się nauczysz, się przenosi. Pętle, funkcje, tablice i mapy, klasy i wyjątki działają w obu językach prawie tak samo, więc drugi język zajmuje tygodnie, a nie miesiące.
Najczęściej zadawane pytania
Czy PHP jest szybszy od Pythona?
Przy typowych żądaniach WWW PHP 8 jest zwykle szybszy od CPythona dzięki OPcache i szybkiemu silnikowi, ale oba są na tyle szybkie, że o czasie odpowiedzi decyduje głównie baza danych i sieć. Przy obliczeniach numerycznych Python zwykle przekazuje pracę bibliotekom napisanym w C, takim jak NumPy.
Czego uczyć się najpierw, PHP czy Pythona?
Zacznij od Pythona, jeśli chcesz programować ogólnie, analizować dane, automatyzować albo zajmować się uczeniem maszynowym. Zacznij od PHP, jeśli Twoim celem są strony WWW, praca z WordPressem albo aplikacje w Laravelu, bo działającą stronę zbudujesz i wdrożysz na prawie każdym hostingu.
Czy Python może zastąpić PHP w tworzeniu stron?
Tak, Django, Flask i FastAPI budują te same rodzaje stron i API. Różnica leży we wdrażaniu i ekosystemie: PHP działa na prawie każdym hostingu współdzielonym i ma WordPressa, a aplikacje webowe w Pythonie zwykle działają jako długo żyjący serwer aplikacji za proxy.
Jaki jest odpowiednik słownika z Pythona w PHP?
Tablica asocjacyjna: $user = ['name' => 'Ada', 'age' => 36]; i $user['name']. Tablice w PHP to uporządkowane mapy, więc ten sam typ pełni rolę listy i słownika z Pythona.