Menu

PHP или Python: синтаксис, веб и что учить первым

PHP создан для веба: файл выполняется на каждый запрос и печатает страницу, на нём работают WordPress и Laravel. Python это язык общего назначения, который тоже умеет веб (Django, Flask) и лидирует в анализе данных, автоматизации и машинном обучении.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

PHP и Python оба динамические интерпретируемые языки, но выросли они для разных задач. PHP создавался для веба: каждый запрос запускает .php-файл, который печатает страницу, и на нём работают WordPress и Laravel. Python язык общего назначения: на нём тоже делают сайты (Django, Flask), и он стандартный выбор для анализа данных, скриптов и машинного обучения. Для сайта или работы с WordPress PHP прямой путь; почти для всего остального чаще выбирают Python.

Сравнить их быстрее всего на одной и той же программе. Вот небольшой скрипт на PHP, его можно запустить:

И та же программа на 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)}")

Логика одинаковая. Видимые различия только в синтаксисе: PHP помечает переменные знаком $, заканчивает инструкции на ; и использует фигурные скобки для блоков; Python использует отступы и обходится без специальных символов.

Синтаксис рядом

ЗадачаPHPPython
Переменная$count = 5;count = 5
Склеить строки"Hi " . $name"Hi " + name
Подставить переменную"Hi $name"f"Hi {name}"
Список[1, 2, 3][1, 2, 3]
Словарь ключ/значение["a" => 1]{"a": 1}
Длинаcount($list), strlen($s)len(list), len(s)
Цикл по словарюforeach ($m as $k => $v)for k, v in m.items():
Функцияfunction add($a, $b) { return $a + $b; }def add(a, b): return a + b
Анонимная функцияfn($x) => $x * 2lambda x: x * 2
Значение для отсутствующего ключа$m["k"] ?? "default"m.get("k", "default")
Строгое равенство===== (без приведения типов)

Массивы: один тип в PHP, списки и словари в Python

Python разделяет списки, словари, кортежи и множества. В PHP есть один тип массива, упорядоченный словарь, который выполняет все эти роли. Ключи могут быть целыми числами или строками, а порядок добавления сохраняется:

Версии на Python нужны два разных типа:

colors = ["red", "green", "blue"]
codes = {"red": "#f00", "blue": "#00f"}

colors.append("yellow")
codes["green"] = "#0f0"

print("blue" in colors)
print("red" in codes)

Единый тип PHP удобен, но приносит сюрприз, которого нет в Python: функции вроде array_filter сохраняют исходные ключи, поэтому в отфильтрованном списке могут быть пропуски (0, 2, 3). Оберните результат в array_values(), чтобы перенумеровать его.

Типы и неявное приведение

Оба языка динамически типизированы, и в обоих можно указывать типы. Главное различие в том, что происходит при смешивании типов. Python отказывается складывать строку и число; PHP сам преобразует числовые строки:

print("10" + 5)   # TypeError: can only concatenate str (not "int") to str
print(7 / 2)      # 3.5
print(7 // 2)     # 3

PHP 8 сделал сравнение строк и чисел гораздо разумнее, но привычка нужна та же: в PHP используйте ===, если преобразование вам не нужно. С declare(strict_types=1); в начале файла PHP ещё и отвергает неверные скалярные типы, переданные в типизированные параметры функций, что приближает его к поведению проверок типов в Python.

Веб-разработка

Здесь различия самые большие. PHP-файл сам по себе уже веб-страница: положите его на сервер, и каждый запрос выполняет его сверху, а данные формы уже лежат в $_GET и $_POST. Запустите этот блок, введите город и нажмите Send: скрипт выполнится снова с заполненным $_POST.

Python для той же страницы нужен фреймворк и запущенный сервер приложений. Минимальная версия на Flask:

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

Ни одна модель не лучше в общем случае. Принцип PHP "один запрос, один свежий запуск" прост в развёртывании и трудно ломается: сбой затрагивает один запрос, а память очищается после каждой страницы. Постоянно работающий процесс Python может хранить данные в памяти между запросами и подходит для веб-сокетов и фоновых задач, но требует больше настройки. Полноценные фреймворки (Laravel и Symfony в PHP, Django в Python) в итоге дают похожие возможности: маршрутизацию, ORM, шаблоны, аутентификацию, очереди.

Производительность

Для веб-страниц PHP 8 с OPcache в целом быстрее CPython на обычном коде, а ещё в PHP 8 есть JIT-компилятор. На практике оба большую часть запроса ждут базу данных или другие сервисы, так что разница редко решает судьбу проекта. У Python со скоростью другая история: тяжёлые вычисления выполняют библиотеки вроде NumPy и pandas, ядро которых написано на C, поэтому Python лидирует в работе с данными, несмотря на более медленный интерпретатор.

Где используется каждый

Сильные стороны PHPСильные стороны Python
Сайты, темы и плагины WordPressАнализ данных (pandas, Jupyter)
Веб-приложения на Laravel и SymfonyМашинное обучение и ИИ (PyTorch, scikit-learn)
Магазины: WooCommerce, Magento, ShopwareАвтоматизация и скрипты
Недорогой виртуальный хостинг, агентства, фрилансНаучные вычисления, обучение
Страницы с серверным рендерингом и APIВеб-бэкенды на Django, Flask, FastAPI

Рынок труда отражает это. Вакансии на PHP в основном про веб-разработку, часто WordPress или Laravel. Вакансии на Python охватывают веб, данные, DevOps и ML, поэтому их больше.

Что учить первым

Выбирайте по тому, что хотите сделать в ближайшие месяцы:

  • Вы хотите делать сайты, работать на фрилансе или с WordPress: учите PHP. Страница окажется в сети быстро, а навыки напрямую превращаются в оплачиваемую работу. Начните с того, что такое PHP, и с переменных.
  • Вам нужны анализ данных, автоматизация, ИИ или первый язык общего назначения: учите Python.
  • Вы хотите делать современные веб-приложения целиком: для бэкенда подойдёт любой из двух, а JavaScript для браузера понадобится всё равно; смотрите PHP или JavaScript.

Большая часть знаний переносится. Циклы, функции, массивы и словари, классы и исключения работают в обоих языках почти одинаково, поэтому второй язык осваивается за недели, а не за месяцы.

Часто задаваемые вопросы

PHP быстрее Python?

На типичных веб-запросах PHP 8 обычно быстрее CPython благодаря OPcache и быстрому движку, но оба достаточно быстры, чтобы время ответа в основном определяли база данных и сеть. Для тяжёлых вычислений Python обычно передаёт работу библиотекам на C, например NumPy.

Что учить первым, PHP или Python?

Начинайте с Python, если вам нужно программирование в целом, анализ данных, автоматизация или машинное обучение. Начинайте с PHP, если цель это сайты, работа с WordPress или приложения на Laravel: рабочую страницу можно собрать и выложить почти на любом хостинге.

Может ли Python заменить PHP в веб-разработке?

Да, на Django, Flask и FastAPI делают такие же сайты и API. Разница в развёртывании и экосистеме: PHP работает почти на любом виртуальном хостинге и имеет WordPress, а веб-приложения на Python обычно работают как постоянно запущенный сервер приложений за прокси.

Что в PHP соответствует словарю Python?

Ассоциативный массив: $user = ['name' => 'Ada', 'age' => 36]; и $user['name']. Массивы PHP это упорядоченные словари, поэтому один и тот же тип заменяет и list, и dict из Python.

Иллюстрация языков программирования Coddy

Учитесь программировать с Coddy

НАЧАТЬ