Что такое PHP

PHP - язык для веба

PHP (Hypertext Preprocessor) - серверный язык программирования, созданный специально для веб-разработки. В отличие от JavaScript, который работает в браузере, PHP выполняется на сервере: он обрабатывает запрос, формирует HTML и отправляет готовую страницу клиенту.

Каждый раз, когда вы заходите на сайт и видите динамическое содержимое - личный кабинет, ленту новостей, форму обратной связи - скорее всего, там работает PHP. По статистике W3Techs, PHP используется примерно на 77% всех сайтов, у которых известен серверный язык.

WordPress, Wikipedia, Facebook (в ранние годы), Drupal, Joomla - всё это PHP. Язык прост в освоении, хорошо документирован и поддерживается на любом хостинге, что делает его удобным стартом для веб-разработки.

Александр
Идём дальше!
История

Как появился PHP

PHP создал датско-канадский программист Расмус Лердорф (Rasmus Lerdorf) в 1994 году. Изначально это был набор Perl-скриптов для учёта посещаемости его личного сайта - аббревиатура расшифровывалась как «Personal Home Page Tools».

В 1995 году Лердорф выпустил исходный код и пригласил других разработчиков к участию. Зеев Сураски (Zeev Suraski) и Анди Гутманс (Andi Gutmans) переписали ядро с нуля, и в 1997 году вышел PHP 3 - уже как полноценный язык. Тогда же появилась новая расшифровка: «PHP: Hypertext Preprocessor».

PHP 5 (2004) принёс объектно-ориентированное программирование; PHP 7 (2015) удвоил производительность; PHP 8 (2020) добавил JIT-компилятор и именованные аргументы. Сегодня язык активно развивается.

Как работает PHP

Серверная обработка запроса

Браузер отправляет запрос на сервер. Веб-сервер (Apache или Nginx) видит файл с расширением .php и передаёт его интерпретатору PHP. PHP выполняет код, формирует HTML-ответ и возвращает его веб-серверу. Сервер отправляет HTML браузеру.

Браузер никогда не видит исходный PHP-код - только результат его выполнения. Это принципиальное отличие от JavaScript, где код виден в инструментах разработчика. Логика, пароли к базам данных, бизнес-правила остаются на сервере.

Для локальной разработки устанавливают связку PHP + веб-сервер. Простейший способ - встроенный сервер PHP командой php -S localhost:8000, который автоматически обрабатывает .php-файлы.

Мария
То есть PHP-код никогда не попадает в браузер?
Синтаксис

Первая программа на PHP

PHP-код вставляется внутрь HTML с помощью тегов <?php и ?>. Всё, что написано вне этих тегов, выводится как есть. Это позволяет смешивать разметку и логику в одном файле.

<!-- файл index.php --> <?php echo "Привет, мир!"; ?> <!-- результат в браузере: --> Привет, мир!

Команда echo выводит текст в HTML-поток. Каждая инструкция завершается точкой с запятой - это обязательно. Если пропустить точку с запятой или закрывающий тег, PHP выдаст ошибку синтаксиса.

Переменные

Переменные в PHP

В PHP все переменные начинаются со знака $. Объявлять тип не нужно - он определяется автоматически при присваивании. Имя переменной может содержать буквы, цифры и знак подчёркивания, но не может начинаться с цифры.

<?php $name = "Анна"; $age = 25; $price = 9.99; $active = true; echo "Привет, $name! Тебе $age лет."; ?>

PHP поддерживает интерполяцию переменных в строках с двойными кавычками - переменная прямо внутри строки заменяется своим значением. Строки с одинарными кавычками этого не делают.

Типы данных

Основные типы данных

PHP поддерживает восемь базовых типов. Четыре скалярных: int (целые числа), float (числа с плавающей точкой), string (строки), bool (булевы значения). Два составных: array (массивы) и object (объекты). Два специальных: null и resource.

Тип переменной можно узнать функцией gettype() или проверить функциями вроде is_int(), is_string(). PHP выполняет автоматическое приведение типов - например, при сложении строки «5» и числа 3 получится число 8. Это удобно, но требует внимания.

Для точного сравнения с проверкой типа используют оператор === (три знака равенства). Обычное == сравнивает только значение и может давать неожиданные результаты при разных типах.

Дмитрий
Так, три знака равенства - это важно. Без этого можно наделать ошибок.
Управляющие конструкции

Условия и циклы

Синтаксис условий и циклов в PHP очень похож на C, Java и JavaScript. Условие записывается через if / elseif / else, циклы - через for, while, foreach.

<?php $score = 85; if ($score >= 90) { echo "Отлично"; } elseif ($score >= 70) { echo "Хорошо"; } else { echo "Нужно повторить"; } // выведет: Хорошо ?>

Блоки кода выделяются фигурными скобками, как в большинстве C-подобных языков. Отступы в PHP не влияют на выполнение кода, но важны для читаемости.

Управляющие конструкции

Цикл foreach и массивы

В PHP массивы создаются функцией array() или сокращённым синтаксисом []. Массивы могут быть индексированными (числовые ключи) и ассоциативными (строковые ключи). Для перебора массива удобнее всего цикл foreach.

<?php $fruits = ["яблоко", "банан", "вишня"]; foreach ($fruits as $fruit) { echo $fruit . "<br>"; } // яблоко, банан, вишня - каждый на новой строке ?>

Оператор точки . - это конкатенация строк в PHP. Массивы в PHP - основа работы с данными: из базы данных данные приходят в виде массивов, конфигурации хранятся в массивах, параметры форм тоже.

Функции

Функции в PHP

Функции объявляются ключевым словом function. PHP имеет тысячи встроенных функций - для строк, массивов, математики, работы с датами и многого другого. Плюс можно определять свои.

<?php function greet($name, $greeting = "Привет") { return "$greeting, $name!"; } echo greet("Алексей"); // Привет, Алексей! echo greet("Мария", "Добрый день"); // Добрый день, Мария! ?>

Параметры функций могут иметь значения по умолчанию - тогда их необязательно передавать при вызове. Функция возвращает результат через return. Без return функция вернёт null.

PHP и HTML

Встраивание PHP в HTML

Главная суперсила PHP - возможность смешивать код и разметку. Можно открывать и закрывать PHP-тег несколько раз в одном файле, перемежая его с HTML. Это позволяет строить динамические страницы очень гибко.

<?php $user = "Иван"; ?> <h1>Добро пожаловать, <?= $user ?>!</h1> <?php if ($logged_in): ?> <p>Ваш профиль готов.</p> <?php else: ?> <p><a href="/login">Войдите</a></p> <?php endif; ?>

Короткий тег <?= - сокращение для <?php echo. Синтаксис «двоеточие вместо скобки» (if/endif, foreach/endforeach) удобен внутри HTML-шаблонов - его легче читать, когда между открывающим и закрывающим тегами много разметки.

Александр
Значит, <?= это просто echo в сокращённом виде?
Формы и запросы

Обработка HTML-форм

Одна из главных задач PHP - обработка данных из форм. Браузер отправляет данные через метод GET (в URL) или POST (в теле запроса). PHP читает их через суперглобальные массивы $_GET и $_POST.

<!-- форма в HTML --> <form method="post" action="greet.php"> <input type="text" name="username"> <button>Отправить</button> </form> <!-- greet.php --> <?php $name = htmlspecialchars($_POST['username'] ?? ''); echo "Привет, $name!"; ?>

Важно всегда обрабатывать входные данные функцией htmlspecialchars(), прежде чем вывести их на страницу. Без этого злоумышленник может внедрить произвольный HTML или JavaScript - это называется XSS-атака.

Базы данных

PHP и MySQL

PHP традиционно работает в связке с базой данных MySQL (или MariaDB). Для безопасного подключения и выполнения запросов используют расширение PDO (PHP Data Objects) или MySQLi. PDO предпочтительнее, потому что поддерживает разные базы данных.

<?php $pdo = new PDO('mysql:host=localhost;dbname=mydb', 'user', 'pass'); // Подготовленный запрос (защита от SQL-инъекций) $stmt = $pdo->prepare('SELECT * FROM users WHERE id = :id'); $stmt->execute([':id' => $userId]); $user = $stmt->fetch(); ?>

Подготовленные запросы - обязательная практика. Никогда не вставляйте данные от пользователя прямо в SQL-строку: это открывает SQL-инъекцию. PDO автоматически экранирует параметры при использовании плейсхолдеров.

Мария
XSS и SQL-инъекции - звучит серьёзно. Это точно нужно запомнить.
Сессии и куки

Сессии: «память» между запросами

HTTP - протокол без состояния: каждый запрос независим. PHP решает это с помощью сессий. Функция session_start() запускает сессию; данные хранятся на сервере и доступны через суперглобальный массив $_SESSION.

<?php session_start(); // Сохранить данные пользователя после входа $_SESSION['user_id'] = 42; $_SESSION['username'] = "Иван"; // На следующей странице session_start(); echo "Привет, " . $_SESSION['username']; ?>

session_start() нужно вызывать до любого вывода на страницу - иначе PHP выдаст ошибку «headers already sent». Куки (setcookie()) хранятся в браузере и подходят для менее чувствительных данных.

ООП в PHP

Классы и объекты

PHP поддерживает объектно-ориентированное программирование с версии 5. Классы объявляются ключевым словом class. Свойства и методы могут быть публичными (public), защищёнными (protected) или приватными (private).

<?php class User { public $name; private $email; public function __construct($name, $email) { $this->name = $name; $this->email = $email; } public function greet() { return "Привет, {$this->name}!"; } } $u = new User("Иван", "ivan@mail.ru"); echo $u->greet(); // Привет, Иван! ?>

Конструктор __construct вызывается автоматически при создании объекта через new. Метод $this внутри класса ссылается на текущий объект.

Composer и пакеты

Composer - менеджер зависимостей

Composer - стандартный менеджер зависимостей для PHP, появившийся в 2012 году. Он скачивает пакеты из репозитория Packagist, управляет версиями и автоматически подключает файлы (autoload).

# Установить зависимость composer require monolog/monolog # composer.json создаётся автоматически # vendor/ - папка с пакетами (в git не включают) <?php require 'vendor/autoload.php'; use Monolog\Logger; ?>

Подключение vendor/autoload.php автоматически загружает все установленные пакеты - не нужно прописывать отдельный require для каждого класса. Это аналог package.json в Node.js или requirements.txt в Python.

Дмитрий
То есть Composer для PHP - это как npm для Node.js?
Фреймворки

Популярные PHP-фреймворки

Фреймворки предоставляют готовую архитектуру, маршрутизацию, работу с базой данных и шаблонами. Три самых популярных:

  • Laravel - самый популярный в мире PHP-фреймворк. Элегантный синтаксис, Eloquent ORM, встроенная аутентификация, очереди задач. Отлично подходит для веб-приложений любой сложности.
  • Symfony - мощный и гибкий фреймворк, ориентированный на крупные корпоративные приложения. Laravel сам использует компоненты Symfony.
  • Slim / Lumen - микрофреймворки для простых API и микросервисов без лишнего груза.

Для быстрого старта подходит Laravel. Он хорошо документирован, имеет огромное сообщество и предоставляет всё необходимое «из коробки».

Где применяется PHP

Области применения

PHP традиционно силён в нескольких областях. WordPress - самая популярная CMS в мире - написана на PHP и поддерживает более 40% всех сайтов. Это означает, что огромное количество плагинов, тем и сайтов требует знания PHP для поддержки и развития.

Интернет-магазины: WooCommerce (надстройка над WordPress), Magento, OpenCart - всё это PHP. Корпоративные порталы, CRM-системы, образовательные платформы - PHP остаётся рабочей лошадкой веба.

Facebook разработал HHVM (виртуальная машина для PHP) и язык Hack - ответвление PHP с типизацией. Wikimedia (Wikipedia) продолжает использовать PHP. Язык стар, но живёт и развивается активно.

Современный PHP

PHP 8: что нового

PHP 8 (2020) и его обновления принесли значимые улучшения. JIT-компилятор (Just-In-Time) позволяет компилировать горячий код прямо во время выполнения, ускоряя вычислительно-интенсивные задачи.

Именованные аргументы позволяют передавать параметры по имени: array_slice(array: $a, offset: 1, length: 3). Атрибуты (аналог аннотаций в Java) добавляют метаданные к классам и методам. Match-выражение - более мощная замена switch.

Fibers (PHP 8.1) - примитивы для кооперативного параллелизма, позволяющие писать асинхронный код без промисов и колбэков. Enum (перечисления), readonly-свойства, intersection types делают код безопаснее.

Александр
Я думал, PHP - старый язык. А тут столько нового!
Установка и запуск

Как запустить PHP локально

Самый простой способ - использовать встроенный веб-сервер PHP. Установите PHP с официального сайта php.net или через пакетный менеджер системы. Затем в папке с проектом выполните:

php -S localhost:8000 # Теперь открой http://localhost:8000 в браузере

Для полноценной разработки (с MySQL) удобнее использовать готовые сборки: XAMPP (Windows/Mac/Linux), Laragon (Windows) или Herd (Mac/Linux). Они включают PHP, Apache/Nginx и MySQL в одном установщике.

Проверка версии: php -v. Актуальные версии PHP - 8.1, 8.2, 8.3. Рекомендуется использовать PHP 8.2+ для новых проектов.

Итоги теории

Что мы узнали

PHP - серверный язык для веба, созданный Расмусом Лердорфом в 1994 году. Код выполняется на сервере и не попадает в браузер. Переменные начинаются с $, строки конкатенируются точкой ., блоки выделяются фигурными скобками.

Ключевые концепции: суперглобальные массивы $_POST и $_GET для данных форм, сессии ($_SESSION) для хранения состояния, PDO для безопасной работы с базой данных. Защита: htmlspecialchars() против XSS, подготовленные запросы против SQL-инъекций.

Экосистема PHP огромна: Composer для пакетов, Laravel для веб-приложений, WordPress занимает 40% интернета. PHP 8 - современный и быстрый язык, а не только «старый» вариант. Знание PHP открывает доступ к огромному рынку веб-разработки.

Мария
Круто! Теперь понимаю, почему PHP до сих пор так востребован.
Сравнение языков

PHP: преимущества и недостатки

По сравнению с Python и Node.js у PHP есть свои сильные стороны и ограничения.

В чём PHP лучше: создан именно для веба - встроенная работа с формами, сессиями, заголовками и шаблонами; модель «один файл - одна страница» понятна новичкам. Хостинг с поддержкой PHP доступен везде и дёшево, деплой часто сводится к загрузке файлов по FTP. WordPress и другие CMS дают огромный рынок вакансий и готовых решений. Простой порог входа и предсказуемая среда выполнения. PHP 8 с JIT и современным синтаксисом заметно быстрее старых версий.

Недостатки: исторический багаж - неконсистентные имена функций, порядок аргументов; современный стиль (типизация, пространства имён) пришёл позже. Не предназначен для real-time с тысячами долгоживущих соединений - для чатов и игр Node.js подходит лучше. Слабее Python в области data science и машинного обучения. Репутация «устаревшего» языка мешает привлечению части разработчиков, хотя экосистема по-прежнему огромна.

Задание 1

Порядок обработки PHP-запроса

Перетащи шаги в правильном порядке (сверху вниз):

Перетаскивай карточки внутри зоны.

Задание 2

Вопросы по теории PHP

1. Как начинаются все переменные в PHP?

2. Какой тег открывает PHP-блок внутри HTML?

3. Какой оператор используется для конкатенации строк?

Задание 3

Сопоставь концепцию с её описанием

Для каждого понятия выбери правильное описание:

$_POST
$_SESSION
PDO
htmlspecialchars()
Задание 4

Синтаксис PHP и безопасность

1. Что нужно вызвать перед использованием $_SESSION?

2. Какой способ защищает от SQL-инъекций?

3. Какой цикл удобнее всего использовать для перебора массива?

Финальный тест

Допуск к практике

Ответь на 8 вопросов. Для допуска нужно не менее 80% (6 из 8).

1. Кто создал PHP?

2. Где выполняется PHP-код?

3. Как правильно объявить переменную в PHP?

4. Как вывести текст в PHP?

5. Какой менеджер пакетов используется в PHP?

6. Что хранит суперглобальный массив $_SESSION?

7. Какой популярный PHP-фреймворк используется для веб-приложений?

8. Как называется короткий тег вывода значения в PHP?

Итоги трёх занятий

Сводная таблица: преимущества и недостатки языков

Ниже - обобщённое сравнение трёх изученных языков программирования. Выбор зависит от задачи, команды и контекста.

Язык Преимущества Недостатки
Python Data Science и ML (Machine Learning) — области анализа данных и машинного обучения. Python стал стандартом де-факто благодаря библиотекам: NumPy (быстрые матричные операции), Pandas (обработка таблиц), scikit-learn (классические ML-алгоритмы), TensorFlow и PyTorch (нейронные сети). Кейс: Netflix использует Python для рекомендательных алгоритмов; NASA — для анализа данных телескопов.

Читаемый синтаксис — код на Python часто читается почти как английский текст. Нет фигурных скобок и точек с запятой; отступы сами по себе задают структуру. Кейс: обучение программированию в школах и университетах по всему миру — Python №1 как первый язык (MIT, Stanford, Яндекс Лицей).

Низкий порог входа — простейший рабочий скрипт умещается в одну строку: print("Hello"). Не нужно объявлять типы, писать main(), компилировать. Кейс: автоматизация рутины — скрипт для переименования 1000 файлов пишется за 10 минут.

Универсальность — Python применяется в веб-разработке (Django, FastAPI), автоматизации (Selenium, Playwright), DevOps (Ansible, скрипты CI/CD), кибербезопасности (Metasploit-модули), научных расчётах, геймдеве (Pygame). Один язык покрывает десятки ниш.

Django и FastAPI — веб-фреймворки. Django: «батарейки в комплекте» — ORM, авторизация, панель администратора, шаблонизатор из коробки. Используется Instagram (на старте), Pinterest, Disqus. FastAPI: современный async-фреймворк для высоконагруженных API, автоматически генерирует документацию OpenAPI (Swagger). Используется в микросервисах и ML-бэкендах.
GIL (Global Interpreter Lock) - глобальная блокировка интерпретатора: в каждый момент времени только один поток может выполнять байт-код Python, даже на многоядерном процессоре. Т.е. создание нескольких потоков (threading) не даёт реального параллелизма для вычислений - потоки конкурируют за одну блокировку. Решение: модуль multiprocessing (отдельные процессы без общего GIL) или asyncio для I/O-задач.

Почему уступает Node.js в real-time: Node.js изначально спроектирован под тысячи одновременных соединений через неблокирующий event loop - один поток обрабатывает все запросы, пока ждёт ответа от БД/сети. Python по умолчанию синхронный: каждый запрос блокирует выполнение до ответа. Asgi-серверы (uvicorn + FastAPI) частично решают это, но экосистема async в Python моложе и менее однородна, чем в Node.js.

Также Python не работает в браузере (нужен отдельный JS для фронта), а производительность «чистого» интерпретируемого кода ниже скомпилированных языков (Go, Rust, C++).
Node.js Один язык (JS) на фронте и бэкенде — разработчик пишет JavaScript и в браузере, и на сервере. Нет переключения контекста между языками, можно переиспользовать код (валидацию форм, модели данных). Кейс: стартапы с небольшой командой — один fullstack-разработчик закрывает всё приложение на одном языке.

Высокая пропускная способность (throughput) — Node.js может обслуживать десятки тысяч одновременных соединений на одном ядре CPU. Это возможно за счёт неблокирующего I/O (Input/Output): пока сервер ждёт ответа от базы данных или файловой системы, он не «стоит», а обрабатывает другие запросы. Кейс: Walmart перешёл с Java на Node.js и выдержал Black Friday с 500 млн+ запросов без падений.

Real-time и APIreal-time означает обмен данными в режиме реального времени без перезагрузки страницы. Библиотека Socket.io строит двунаправленный канал между сервером и клиентом (WebSocket). Кейсы: онлайн-чаты (Slack изначально), совместное редактирование (Figma), live-уведомления, онлайн-игры, трекеры курьеров.

npm (Node Package Manager) — крупнейший в мире реестр пакетов: более 2,5 млн опубликованных библиотек. Любая задача — от парсинга CSV до отправки email — решается готовым пакетом за одну команду: npm install название. Альтернативы: yarn, pnpm — более быстрые менеджеры пакетов с тем же реестром.

Webpack и Vite — почему это преимущество Node.js, а не фронтенда? Потому что Webpack и Vite — это программы, которые запускаются именно в среде Node.js на компьютере разработчика или CI/CD-сервере. Без установленного Node.js они не работают вообще. То есть Node.js здесь выступает как платформа для инструментов разработки, а не только как веб-сервер.

Webpack: читает исходный код (сотни JS-файлов, CSS, изображения, шрифты), «склеивает» их в один или несколько оптимизированных файлов-бандлов для браузера, минифицирует код (убирает пробелы и комментарии), заменяет импорты. Это Node.js-процесс, который может работать как dev-сервер с hot reload (мгновенной перезагрузкой при изменении файла).

Vite: аналог Webpack, но использует нативные ES-модули браузера во время разработки — не собирает весь код заранее, а отдаёт файлы по требованию. Старт проекта занимает <1 секунды вместо 10–30 секунд у Webpack. Тоже Node.js-процесс.

Таким образом, весь современный фронтенд-стек (React, Vue, Angular, TypeScript) зависит от Node.js как от рантайма: без него не запустить сборщик, не установить пакеты через npm, не выполнить скрипты из package.json. Это делает Node.js обязательным инструментом даже для тех, кто не пишет бэкенд.

SSR (Server-Side Rendering) через Next.js: страницы React рендерятся на Node.js-сервере и отправляются браузеру готовым HTML — это ускоряет первую загрузку и позволяет поисковикам индексировать контент (SEO). Кейс: Vercel, TikTok, Twitch используют Next.js.
CPU-bound задачи - это операции, которые нагружают процессор непрерывными вычислениями: кодирование видео, сжатие данных, сложные математические расчёты, обработка изображений. В таких задачах нельзя «отпустить» event loop и ждать - нужно постоянно считать. Пока выполняется такая задача, Node.js не может обработать ни один другой запрос: весь сервер «замерзает».

Как имитируется многопоточность в Node.js:
  • Worker Threads (модуль worker_threads) - настоящие потоки ОС для тяжёлых вычислений, появились в Node.js 10+;
  • child_process - запуск отдельных дочерних процессов;
  • Cluster - запуск нескольких копий Node.js-процесса на разных ядрах CPU;
  • Вынос тяжёлых задач в отдельный микросервис (например, на Python или Go).

Модель «страница = файл» - подход PHP, где каждый URL соответствует физическому файлу на сервере: /aboutabout.php, /contactcontact.php. Хостинг и браузер «понимают» это автоматически. В Node.js такой модели нет: нужно самостоятельно прописывать маршруты в коде (app.get('/about', ...)), настраивать деплой, обрабатывать 404. Это гибче, но требует больше кода и понимания.
PHP Создан для веба «из коробки» — PHP изначально разрабатывался именно для генерации HTML-страниц на сервере. Встроена обработка форм ($_POST, $_GET), управление сессиями (session_start(), $_SESSION), работа с куками, загрузка файлов, отправка email через mail(). Не нужно устанавливать дополнительные библиотеки для базовых веб-задач — всё готово. Кейс: типичный сайт с формой обратной связи и авторизацией пишется без единого стороннего пакета.

Дешёвый хостинг везде — shared-хостинг с поддержкой PHP стоит от 100–300 рублей в месяц и доступен у тысяч провайдеров по всему миру. Для Node.js или Python часто нужен VPS (виртуальный сервер) — дороже и сложнее в настройке. Кейс: малый бизнес, студенческие проекты, клиентские сайты — PHP позволяет запустить сайт без DevOps-компетенций.

WordPress и CMSCMS (Content Management System), система управления контентом. WordPress написан на PHP и занимает ~43% всего интернета (по данным W3Techs). Это означает огромный рынок труда: разработка тем, плагинов, кастомизация. Другие PHP-CMS: Joomla, Drupal, Bitrix (популярен в России). Кейс: блоги, новостные сайты, интернет-магазины на WooCommerce — всё это PHP.

Простой деплой — деплой означает публикацию (развёртывание) проекта на сервере. Для PHP достаточно скопировать файлы по FTP или через файловый менеджер хостинга — сервер начинает выполнять код немедленно, без сборки и перезапуска процессов. Для сравнения: Node.js требует настройки process manager (pm2), reverse proxy (Nginx), управления переменными окружения.

PHP 8 — быстрый и современный — PHP 8 (2020) и 8.x привнесли: JIT-компилятор (Just-In-Time, компиляция кода прямо во время выполнения для ускорения), именованные аргументы, union types, enums, fibers (асинхронность), атрибуты (аналог аннотаций). По бенчмаркам PHP 8 быстрее PHP 5 в 2–3 раза. Современный фреймворк Laravel делает разработку на PHP сопоставимой по удобству с Ruby on Rails и Django.
Историческая непоследовательность API - конкретные примеры:
  • Порядок аргументов «игла/стог»: strpos($haystack, $needle) - сначала строка, потом искомое; но in_array($needle, $haystack) - наоборот, сначала искомое. Нужно каждый раз проверять документацию.
  • Нотация функций: одни через подчёркивание (str_replace, array_push), другие без него (htmlspecialchars, strlen), третьи через дефис-в-верблюде (htmlentities). Никакой системы.
  • Префиксы: функции для строк - str* или без префикса (substr, strcmp, trim); для массивов - array_*, но не всегда (sort, count).
  • Классы появились поздно: большинство стандартных функций работают в процедурном стиле, а новые возможности добавляются через ООП. Два параллельных мира в одном языке.

В итоге код на PHP требует постоянного обращения к документации даже для опытных разработчиков. Современные фреймворки (Laravel) скрывают эти несоответствия, но под капотом они никуда не делись.

В реальных проектах языки часто комбинируют: например, бэкенд на Node.js или Python, админка на Laravel, фронтенд на React. Понимание сильных и слабых сторон каждого помогает выбирать инструмент под задачу.

Практика

Задание: первая PHP-страница

Что нужно сделать:

Критерии проверки (100 баллов):

Минимум для зачёта: 60 баллов.

Загрузи файл index.php