PHP và Python đều là ngôn ngữ động, thông dịch, nhưng chúng lớn lên cho những công việc khác nhau. PHP được tạo ra cho web: mỗi request chạy một tệp .php in ra một trang, và nó là nền tảng của WordPress và Laravel. Python là ngôn ngữ đa năng: nó cũng chạy website (Django, Flask), và là lựa chọn mặc định cho khoa học dữ liệu, viết script và machine learning. Với một website hay công việc WordPress, PHP là con đường thẳng nhất; với gần như mọi thứ khác, Python là lựa chọn phổ biến hơn.
Cách so sánh nhanh nhất là viết cùng một chương trình bằng cả hai. Đây là một script nhỏ bằng PHP, bạn chạy thử được:
Và cùng chương trình đó bằng 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)}")
Logic giống hệt nhau. Khác biệt nhìn thấy được nằm ở cú pháp: PHP đánh dấu biến bằng $, kết thúc câu lệnh bằng ; và dùng dấu ngoặc nhọn cho khối lệnh; Python dùng thụt lề và không có ký hiệu đánh dấu nào.
So sánh cú pháp
| Việc cần làm | PHP | Python |
|---|---|---|
| Biến | $count = 5; | count = 5 |
| Nối chuỗi | "Hi " . $name | "Hi " + name |
| Chèn biến | "Hi $name" | f"Hi {name}" |
| Danh sách | [1, 2, 3] | [1, 2, 3] |
| Map khóa/giá trị | ["a" => 1] | {"a": 1} |
| Độ dài | count($list), strlen($s) | len(list), len(s) |
| Duyệt một map | foreach ($m as $k => $v) | for k, v in m.items(): |
| Hàm | function add($a, $b) { return $a + $b; } | def add(a, b): return a + b |
| Hàm ẩn danh | fn($x) => $x * 2 | lambda x: x * 2 |
| Giá trị dự phòng khi thiếu khóa | $m["k"] ?? "default" | m.get("k", "default") |
| So sánh chặt | === | == (không tự đổi kiểu) |
Mảng: một kiểu trong PHP, list và dict trong Python
Python tách riêng list, dict, tuple và set. PHP chỉ có một kiểu mảng, là một map có thứ tự, làm được tất cả những việc đó. Khóa có thể là số nguyên hoặc chuỗi, và thứ tự bạn thêm vào được giữ nguyên:
Phiên bản Python cần hai kiểu khác nhau:
colors = ["red", "green", "blue"]
codes = {"red": "#f00", "blue": "#00f"}
colors.append("yellow")
codes["green"] = "#0f0"
print("blue" in colors)
print("red" in codes)
Một kiểu duy nhất của PHP rất tiện, nhưng mang theo một bất ngờ mà Python không có: các hàm như array_filter giữ nguyên khóa gốc, nên một danh sách sau khi lọc có thể bị hổng chỉ số (0, 2, 3). Bọc kết quả trong array_values() để đánh số lại.
Kiểu dữ liệu và tự động đổi kiểu
Cả hai ngôn ngữ đều có kiểu động, và đều cho phép thêm type hint. Khác biệt lớn là chuyện gì xảy ra khi các kiểu trộn lẫn. Python từ chối cộng một chuỗi với một số; PHP tự chuyển chuỗi số cho bạn:
print("10" + 5) # TypeError: can only concatenate str (not "int") to str
print(7 / 2) # 3.5
print(7 // 2) # 3
PHP 8 đã làm phép so sánh giữa chuỗi và số hợp lý hơn nhiều, nhưng thói quen cần tập vẫn vậy: dùng === trong PHP, trừ khi bạn muốn có chuyển đổi. Với declare(strict_types=1); ở đầu tệp, PHP còn từ chối giá trị vô hướng sai kiểu truyền vào tham số hàm có khai báo kiểu, gần với cách các công cụ kiểm tra kiểu của Python hoạt động.
Lập trình web
Đây là chỗ hai ngôn ngữ khác nhau nhiều nhất. Bản thân một tệp PHP đã là một trang web: đặt nó lên máy chủ, và mỗi request sẽ chạy nó từ đầu, với dữ liệu form có sẵn trong $_GET và $_POST. Chạy khối này, gõ tên một thành phố rồi nhấn Send: script chạy lại với $_POST đã có dữ liệu.
Python cần một framework và một app server đang chạy cho cùng trang đó. Một phiên bản Flask tối giản:
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
Không mô hình nào tốt hơn hẳn. Kiểu "một request, một lần chạy mới" của PHP dễ triển khai và khó hỏng: một lần crash chỉ ảnh hưởng một request, và bộ nhớ được dọn sạch sau mỗi trang. Tiến trình ứng dụng chạy lâu dài của Python có thể giữ dữ liệu trong bộ nhớ giữa các request, hợp với websocket và tác vụ nền, nhưng cần cài đặt nhiều hơn. Các framework đầy đủ (Laravel và Symfony bên PHP, Django bên Python) rốt cuộc đều cung cấp những tính năng tương tự: định tuyến, ORM, template, xác thực, hàng đợi.
Hiệu năng
Với trang web, PHP 8 cùng OPcache nhìn chung chạy code thuần nhanh hơn CPython, và PHP 8 còn có sẵn trình biên dịch JIT. Trên thực tế cả hai đều dành phần lớn thời gian của một request để chờ cơ sở dữ liệu hoặc các dịch vụ khác, nên khác biệt này hiếm khi quyết định một dự án. Câu chuyện tốc độ của Python thì khác: phần tính toán số nặng do các thư viện như NumPy và pandas đảm nhận, với lõi viết bằng C, đó là lý do Python dẫn đầu mảng dữ liệu dù trình thông dịch chậm hơn.
Mỗi ngôn ngữ được dùng ở đâu
| PHP mạnh nhất ở | Python mạnh nhất ở |
|---|---|
| Trang WordPress, theme và plugin | Phân tích dữ liệu (pandas, Jupyter) |
| Ứng dụng web Laravel và Symfony | Machine learning và AI (PyTorch, scikit-learn) |
| Cửa hàng online: WooCommerce, Magento, Shopware | Tự động hóa và viết script |
| Shared hosting giá rẻ, agency, website freelance | Tính toán khoa học, giảng dạy |
| Trang render trên máy chủ và API | Backend web với Django, Flask, FastAPI |
Thị trường việc làm phản ánh đúng điều này. Vị trí PHP chủ yếu là lập trình web, thường là WordPress hoặc Laravel. Vị trí Python trải rộng từ web, dữ liệu, DevOps đến ML, nên số lượng nhiều hơn.
Nên học cái nào trước
Hãy chọn theo thứ bạn muốn xây trong vài tháng tới:
- Bạn muốn làm website, làm freelance hoặc làm việc với WordPress: học PHP. Bạn sẽ có trang chạy online rất nhanh, và kỹ năng áp dụng thẳng vào công việc được trả tiền. Bắt đầu với PHP là gì và biến.
- Bạn muốn phân tích dữ liệu, tự động hóa, AI, hoặc một ngôn ngữ đầu tiên đa năng: học Python.
- Bạn muốn xây ứng dụng web hiện đại từ đầu đến cuối: cả hai đều được cho backend, và bạn vẫn sẽ cần JavaScript cho trình duyệt; xem PHP vs JavaScript.
Phần lớn những gì bạn học đều dùng lại được. Vòng lặp, hàm, mảng và map, lớp và ngoại lệ hoạt động gần như giống nhau ở cả hai, nên ngôn ngữ thứ hai chỉ mất vài tuần chứ không phải vài tháng.
Câu hỏi thường gặp
PHP có nhanh hơn Python không?
Với các request web thông thường, PHP 8 thường nhanh hơn CPython nhờ OPcache và một engine nhanh, nhưng cả hai đều đủ nhanh để cơ sở dữ liệu và mạng mới là thứ quyết định phần lớn thời gian phản hồi. Với tính toán số, Python thường giao việc cho các thư viện viết bằng C như NumPy.
Nên học PHP hay Python trước?
Học Python trước nếu bạn muốn lập trình nói chung, phân tích dữ liệu, tự động hóa hoặc machine learning. Học PHP trước nếu mục tiêu của bạn là làm website, làm WordPress hay ứng dụng Laravel, vì bạn có thể dựng và đưa một trang chạy được lên gần như mọi hosting web.
Python có thay được PHP trong lập trình web không?
Có, Django, Flask và FastAPI xây được cùng loại trang web và API. Khác biệt nằm ở cách triển khai và hệ sinh thái: PHP chạy trên gần như mọi shared host và có WordPress, còn ứng dụng web Python thường chạy như một app server lâu dài phía sau proxy.
Trong PHP, thứ gì tương đương dictionary của Python?
Mảng kết hợp: $user = ['name' => 'Ada', 'age' => 36]; và $user['name']. Mảng PHP là map có thứ tự, nên cùng một kiểu đảm nhận vai trò của cả list lẫn dict trong Python.