Эволюция PHP

PHP уже более 30 лет остается одним из наиболее распространенных языков программирования для веб-разработки. За это время язык изменился практически полностью. От небольшого набора CGI-скриптов он превратился в современный язык программирования со строгой типизацией, развитой объектно-ориентированной моделью, высокой производительностью и богатой экосистемой.

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

Первая часть статьи посвящена ранней истории PHP, начиная с появления языка и заканчивая последними версиями семейства PHP 4.


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

История PHP началась в 1994 году. Датский программист Расмус Лердорф создал небольшой набор CGI-скриптов на языке Perl для отслеживания посещаемости собственного сайта и обработки HTML-форм.

Первоначально проект назывался Personal Home Page Tools или просто PHP Tools.

Со временем количество возможностей увеличивалось. Помимо статистики посещений появились:

  • обработка HTML-форм;
  • взаимодействие с базами данных;
  • генерация динамического HTML;
  • работа с HTTP-запросами.

Поскольку проект оказался полезным другим разработчикам, его исходный код был опубликован в открытом доступе.

Именно этот момент считается началом истории PHP.


PHP/FI

В 1995 году появился PHP/FI, что расшифровывалось как Personal Home Page / Forms Interpreter.

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

Пример страницы выглядел следующим образом:

<html>
<body>

Сегодня:
<?php echo date('Y-m-d'); ?>

</body>
</html>

Этот принцип остается одной из характерных особенностей PHP даже сегодня.

Основные возможности PHP/FI

По сравнению с первоначальной версией язык получил множество новых функций.

Появились:

  • встроенный интерпретатор;
  • поддержка SQL;
  • работа с HTML-формами;
  • взаимодействие с веб-сервером;
  • встроенные функции обработки строк;
  • генерация динамических страниц.

По современным меркам возможностей было немного, однако в середине 90-х годов это существенно упрощало создание интерактивных сайтов.


PHP 3

Год выпуска: 1998

PHP 3 считается первой зрелой версией языка.

Именно начиная с этой версии PHP стал активно использоваться разработчиками во всем мире.

Главным изменением стала практически полная переработка внутренней архитектуры.

Новый движок разработали Зив Сураски и Энди Гутманс. Позднее они основали компанию Zend Technologies, которая на протяжении многих лет определяла развитие языка.

Основные нововведения PHP 3

В PHP 3 появились:

  • полностью переписанное ядро;
  • модульная архитектура;
  • поддержка расширений;
  • улучшенная работа с различными СУБД;
  • значительно более высокая производительность;
  • расширяемый API для разработчиков модулей.

Именно в PHP 3 язык получил современную расшифровку своего названия:

PHP: Hypertext Preprocessor

Почему PHP 3 оказался успешным

К концу 90-х годов большинство веб-сайтов создавались с использованием CGI-программ, Perl и различных серверных решений, требующих сложной настройки.

PHP предлагал гораздо более простой подход:

  • код можно было писать прямо внутри HTML;
  • язык был бесплатным;
  • большинство хостинг-провайдеров начали устанавливать PHP по умолчанию;
  • для начала разработки не требовалось сложной инфраструктуры.

Это стало одной из причин стремительного роста популярности PHP.


PHP 4

Год выпуска: 2000

Выход PHP 4 стал крупнейшим обновлением за всю историю языка на тот момент.

Главным нововведением стал полностью новый движок Zend Engine 1.

Если PHP 3 сделал язык популярным, то PHP 4 позволил использовать его для разработки значительно более крупных проектов.

Основные изменения PHP 4

Версия PHP 4 принесла множество внутренних улучшений:

  • новый Zend Engine;
  • более эффективное управление памятью;
  • повышение производительности;
  • буферизацию вывода;
  • поддержку HTTP-сессий;
  • улучшенную работу расширений;
  • повышение стабильности интерпретатора.

По сравнению с PHP 3 производительность выросла настолько значительно, что многие крупные сайты смогли обслуживать существенно большее количество пользователей без модернизации оборудования.

Где использовался PHP 4

Именно на PHP 4 создавались тысячи популярных проектов начала 2000-х годов:

  • корпоративные сайты;
  • интернет-магазины;
  • форумы;
  • новостные порталы;
  • первые версии популярных CMS;
  • различные внутренние информационные системы.

Несмотря на отсутствие полноценного объектно-ориентированного программирования, язык отлично подходил для большинства задач своего времени.


Развитие PHP 4 по минорным версиям

Хотя PHP 4 принято воспринимать как единое поколение языка, каждая минорная версия приносила важные изменения, которые существенно влияли на разработку приложений.

PHP 4.1

Дата выпуска: декабрь 2001 года

Одним из самых важных изменений стало появление суперглобальных массивов.

До PHP 4.1 разработчики использовали специальные массивы:

$HTTP_GET_VARS
$HTTP_POST_VARS
$HTTP_COOKIE_VARS

После выхода новой версии появились привычные сегодня суперглобальные переменные:

$_GET
$_POST
$_COOKIE
$_FILES
$_SERVER
$_ENV
$_REQUEST
$_SESSION

Пример:

$username = $_POST['username'];

Почему это было важно

Суперглобальные массивы:

  • имели единый синтаксис;
  • были доступны из любой области видимости;
  • значительно упрощали написание приложений;
  • сделали код более понятным.

Сегодня невозможно представить PHP без этой возможности.


PHP 4.2

Дата выпуска: апрель 2002 года

Эта версия была ориентирована прежде всего на безопасность.

Отключение register_globals

Главным изменением стало отключение директивы register_globals по умолчанию.

Ранее PHP автоматически создавал переменные из параметров запроса.

Например:

page.php?id=15

автоматически создавал переменную:

$id = 15;

Это выглядело удобно, однако приводило к огромному количеству уязвимостей.

После отключения register_globals разработчики были вынуждены явно обращаться к данным запроса:

$id = $_GET['id'];

Именно этот подход используется до сих пор.

Другие изменения

Также были улучшены:

  • загрузка файлов;
  • работа с HTTP-запросами;
  • обработка переменных окружения;
  • безопасность выполнения скриптов.

PHP 4.3

Дата выпуска: декабрь 2002 года

PHP 4.3 был ориентирован на производительность и стабильность.

Основные изменения

В этой версии были улучшены:

  • работа Zend Engine;
  • производительность регулярных выражений;
  • обработка сессий;
  • взаимодействие с веб-сервером;
  • работа командной строки (CLI).

Именно начиная с PHP 4.3 многие разработчики стали использовать PHP не только для веб-приложений, но и для написания консольных утилит.

Улучшение CLI

Командный интерфейс стал значительно стабильнее и получил дополнительные возможности для автоматизации задач.

Позднее именно CLI стал основой для таких инструментов, как Composer, PHPUnit и консольные команды современных PHP-фреймворков.


PHP 4.4

Дата выпуска: июль 2005 года

PHP 4.4 стал последней версией семейства PHP 4.

Ее основная задача заключалась в подготовке разработчиков к переходу на PHP 5.

Основные изменения

Версия получила:

  • многочисленные исправления ошибок;
  • улучшенную совместимость расширений;
  • повышение стабильности работы;
  • исправления проблем безопасности;
  • оптимизацию внутренних механизмов Zend Engine.

Новых крупных возможностей практически не появилось, поскольку основные усилия разработчиков были сосредоточены на развитии PHP 5.

Завершение эпохи PHP 4

PHP 4 сыграл огромную роль в развитии веб-технологий.

Именно это поколение языка сделало PHP одним из мировых лидеров среди серверных языков программирования.

Однако архитектура PHP 4 уже не позволяла эффективно развивать объектно-ориентированное программирование. Разработчикам требовались новые возможности: инкапсуляция, наследование, интерфейсы, исключения и современная модель объектов.

Ответом на эти требования стал PHP 5, который полностью изменил подход к разработке приложений и открыл новую главу в истории языка.


PHP 5

Год выпуска: 2004

PHP 5 стал ключевым этапом в истории языка. Именно в этой версии появилась полноценная объектно-ориентированная модель, которая приблизила PHP к современным языкам общего назначения.

Главной технологической основой стал Zend Engine 2, полностью переработанный по сравнению с PHP 4.

Основные изменения PHP 5

  • полноценное объектно-ориентированное программирование;
  • поддержка классов и интерфейсов;
  • видимость методов и свойств (public, protected, private);
  • исключения (Exceptions);
  • улучшенная работа с памятью;
  • стабильная архитектура расширений;
  • активное развитие стандартной библиотеки.

PHP 5 стал фундаментом для большинства современных PHP-фреймворков.


Развитие PHP 5 по минорным версиям

В рамках PHP 5 именно минорные версии определили современный облик языка. Практически каждая версия добавляла функциональность, которая сегодня считается базовой.

PHP 5.1

Год выпуска: 2005

PHP 5.1 стал первым стабильным шагом после выхода новой архитектуры.

Основные изменения

  • внедрение PDO как унифицированного слоя доступа к базам данных;
  • улучшенный объект DateTime;
  • поддержка расширений PDO drivers;
  • повышение производительности ядра;
  • улучшение обработки ошибок.

PDO

PDO стал ключевым инструментом работы с базами данных:

$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);

Главное преимущество PDO:

  • единый интерфейс для разных СУБД;
  • подготовленные выражения;
  • защита от SQL-инъекций.

PHP 5.2

Год выпуска: 2006

PHP 5.2 стал одной из самых массово используемых версий PHP 5.

Основные изменения

  • расширение JSON стало встроенным;
  • появление фильтров filter_var();
  • улучшение работы с памятью;
  • повышение стабильности;
  • улучшение обработки исключений;
  • добавление DateTimeZone.

JSON поддержка

$data = json_decode($json, true);

JSON стал стандартом обмена данными между сервером и клиентом.

Filter extension

$email = filter_var($email, FILTER_VALIDATE_EMAIL);

Это стало основой безопасной обработки пользовательских данных.


PHP 5.3

Год выпуска: 2009

PHP 5.3 считается одним из самых значимых релизов в истории языка.

Основные изменения

  • пространства имен (Namespaces);
  • замыкания (Closures);
  • позднее статическое связывание (Late Static Binding);
  • сборщик циклического мусора (Garbage Collector);
  • расширение Phar;
  • сокращенный тернарный оператор;
  • поддержка анонимных функций.

Пространства имен

namespace App\Controller;

class UserController {}

Namespaces стали критически важны для больших проектов.


Замыкания

$sum = function($a, $b) {
    return $a + $b;
};

Closures изменили стиль функционального программирования в PHP.


Garbage Collector

Добавление GC позволило эффективно управлять циклическими ссылками, что улучшило работу с памятью в долгоживущих процессах.


PHP 5.4

Год выпуска: 2012

PHP 5.4 стал версией, в которой язык избавился от множества устаревших механизмов.

Основные изменения

  • короткий синтаксис массивов [];
  • traits;
  • встроенный веб-сервер для разработки;
  • удаление register_globals, magic_quotes, safe_mode;
  • улучшения производительности;
  • улучшенная работа с памятью.

Traits

trait Logger {
    public function log($msg) {
        echo $msg;
    }
}

Traits стали альтернативой множественному наследованию.


Встроенный сервер

php -S localhost:8000

Это упростило разработку и тестирование приложений без Apache или Nginx.


PHP 5.5

Год выпуска: 2013

PHP 5.5 добавил инструменты, которые напрямую повлияли на безопасность и архитектуру приложений.

Основные изменения

  • генераторы (Generators);
  • finally;
  • OPcache (официально включен);
  • функция password_hash();
  • list() в foreach;
  • поддержка array_column().

Генераторы

function numbers() {
    yield 1;
    yield 2;
    yield 3;
}

Генераторы позволили работать с большими наборами данных без загрузки их в память.


Password API

$hash = password_hash($password, PASSWORD_DEFAULT);

Это стало стандартом безопасного хранения паролей.


PHP 5.6

Год выпуска: 2014

PHP 5.6 стал последним релизом семейства PHP 5.

Основные изменения

  • variadic functions;
  • распаковка аргументов;
  • константные выражения;
  • импорт функций через use;
  • оператор ** (возведение в степень);
  • улучшения OPcache.

Variadic functions

function sum(...$numbers) {
    return array_sum($numbers);
}

Распаковка аргументов

sum(...[1, 2, 3]);

Импорт функций

use function App\Helpers\debug;

Итоги эпохи PHP 5

PHP 5 стал фундаментом современной экосистемы языка.

Именно в этой версии сформировались ключевые принципы:

  • объектно-ориентированная архитектура;
  • работа через PDO;
  • исключения как основной механизм обработки ошибок;
  • использование namespaces;
  • функциональные элементы (closures, generators);
  • безопасное хранение паролей;
  • стандартизация кода через расширения и библиотеки.

Большинство современных PHP-фреймворков, включая Symfony и Laravel, базируются именно на возможностях, появившихся в PHP 5.

Эта версия определила стиль PHP-разработки на многие годы вперед и стала переходным этапом к современному PHP 7 и PHP 8.


PHP 7

Год выпуска: 2015

PHP 7 стал одним из самых значимых релизов за всю историю языка. Внутри проекта эта версия изначально должна была стать PHP 6, однако разработка версии с полноценной поддержкой Unicode была прекращена из-за архитектурных проблем и низкой производительности. В результате следующий крупный релиз получил номер PHP 7.

Главным технологическим изменением стал Zend Engine 3, который полностью переработал внутреннюю структуру исполнения кода.

Ключевые изменения PHP 7

  • увеличение производительности в 2 и более раз по сравнению с PHP 5.6;
  • значительное снижение потребления памяти;
  • новая система обработки ошибок;
  • улучшенная внутренняя архитектура движка;
  • упрощение синтаксиса и добавление строгой типизации;
  • удаление устаревших возможностей.

PHP 7 стал стандартом для высоконагруженных веб-систем.


Новая модель ошибок: Throwable

До PHP 7 фатальные ошибки не могли быть перехвачены через try/catch. Теперь ошибки и исключения объединены в единый интерфейс Throwable.

try {
    undefinedFunction();
} catch (Throwable $e) {
    echo $e->getMessage();
}

Это изменение радикально улучшило надежность серверных приложений.


Скаларная типизация

PHP 7 ввел возможность указывать типы для параметров и возвращаемых значений.

function add(int $a, int $b): int {
    return $a + $b;
}

Также появилась строгая типизация:

declare(strict_types=1);

Это стало основой для написания предсказуемого и безопасного кода.


Null Coalescing Operator

Оператор ?? упростил работу с переменными.

$username = $_GET['user'] ?? 'guest';

Он заменил громоздкие конструкции с isset().


Spaceship Operator

Оператор <=> используется для сравнения значений.

echo 1 <=> 2;

Возвращает:

  • -1, если левый операнд меньше;
  • 0, если равны;
  • 1, если больше.

Анонимные классы

$logger = new class {
    public function log($msg) {
        echo $msg;
    }
};

Это позволило создавать одноразовые объекты без объявления полноценного класса.


PHP 7.1

Год выпуска: 2016

PHP 7.1 стал первым минорным релизом после крупного перехода и сфокусировался на улучшении типизации и расширении возможностей языка.

Основные изменения

  • nullable types;
  • тип void;
  • псевдотип iterable;
  • множественный catch;
  • константы с модификаторами доступа.

Nullable types

function findUser(int $id): ?User {
    return null;
}

Теперь тип может явно разрешать null, что повысило читаемость API.


Void functions

function logMessage(string $msg): void {
    echo $msg;
}

Функция с void не возвращает значение, что делает контракт функции более строгим.


Iterable

function process(iterable $items) {
    foreach ($items as $item) {}
}

Тип iterable объединил массивы и объекты Traversable.


PHP 7.2

Год выпуска: 2017

PHP 7.2 продолжил развитие типизации и безопасности.

Основные изменения

  • тип object;
  • расширение Sodium для криптографии;
  • улучшения производительности;
  • более строгая работа с типами.

Тип object

function handle(object $data) {
}

Позволяет принимать любой объект, независимо от класса.


Sodium extension

Расширение стало стандартом для криптографических операций и заменило устаревшие библиотеки.

$encrypted = sodium_crypto_secretbox($msg, $nonce, $key);

PHP 7.3

Год выпуска: 2018

PHP 7.3 был направлен на улучшение синтаксиса и стандартной библиотеки.

Основные изменения

  • гибкий синтаксис Heredoc и Nowdoc;
  • функции array_key_first() и array_key_last();
  • улучшения PCRE2;
  • оптимизации производительности.

Работа с массивами

$first = array_key_first($array);
$last = array_key_last($array);

Это упростило работу с ассоциативными массивами.


Гибкий Heredoc

$text = <<<TXT
Hello world
TXT;

Синтаксис стал более устойчивым и предсказуемым.


PHP 7.4

Год выпуска: 2019

PHP 7.4 стал последним релизом семейства PHP 7 и принес множество возможностей, которые приблизили язык к современному стилю разработки.

Основные изменения

  • Typed Properties;
  • Arrow Functions;
  • Null coalescing assignment;
  • Preloading;
  • Weak References;
  • улучшения производительности.

Typed Properties

class User {
    public int $id;
    public string $name;
}

Это стало важным шагом к строгой объектной модели.


Arrow Functions

$nums = array_map(fn($n) => $n * 2, [1,2,3]);

Сократился синтаксис для простых функций.


Null coalescing assignment

$config['timeout'] ??= 30;

Позволяет задавать значение по умолчанию.


Preloading

Preloading позволяет загружать PHP-файлы в память при старте сервера.

Это повышает производительность в долгоживущих процессах, особенно в связке с OPcache.


Итоги PHP 7

PHP 7 стал фундаментом современной высокопроизводительной разработки:

  • резкий рост скорости выполнения;
  • введение строгой типизации;
  • улучшенная обработка ошибок;
  • современные синтаксические конструкции;
  • подготовка языка к архитектуре PHP 8.

Именно PHP 7 сделал язык конкурентоспособным в системах с высокой нагрузкой, REST API и микросервисной архитектуре.


PHP 8

Год выпуска: 2020

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

Главным технологическим изменением стала дальнейшая эволюция Zend Engine 4, а также внедрение JIT-компиляции (Just-In-Time).


Ключевые изменения PHP 8

  • JIT-компиляция;
  • атрибуты (Attributes);
  • union types;
  • match expression;
  • named arguments;
  • constructor property promotion;
  • nullsafe operator;
  • улучшения системы типов;
  • значительное обновление стандартной библиотеки;
  • повышение производительности ядра.

PHP 8 закрепил переход PHP в категорию современных строго типизированных языков.


JIT-компиляция

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

function calc(int $n): int {
    return $n * 2;
}

JIT ускоряет выполнение вычислительных задач, особенно:

  • математических расчетов;
  • обработки данных;
  • алгоритмических задач.

В веб-приложениях прирост производительности зависит от нагрузки и архитектуры.


Named Arguments

Именованные аргументы позволяют передавать параметры по имени, а не по позиции.

setcookie(
    name: "session",
    value: "abc123",
    httponly: true
);

Преимущества:

  • повышение читаемости;
  • отсутствие зависимости от порядка аргументов;
  • упрощение работы с функциями с большим числом параметров.

Attributes

Атрибуты заменили аннотации DocBlock и стали встроенным механизмом метаданных.

#[Route("/users")]
class UserController {}

Используются во фреймворках:

  • Symfony;
  • Doctrine;
  • Laravel (частично через пакеты).

Атрибуты сделали метаданные частью языка, а не комментариев.


Union Types

Union types позволяют указывать несколько допустимых типов.

function parse(int|string $value) {
}

Это усилило статическую проверку типов и уменьшило необходимость в mixed.


Match Expression

match является более строгой и безопасной альтернативой switch.

$status = match ($code) {
    200 => "OK",
    404 => "Not Found",
    default => "Unknown",
};

Особенности:

  • возвращает значение;
  • строгие сравнения;
  • отсутствие fall-through;
  • более компактный синтаксис.

Constructor Property Promotion

Позволяет объявлять свойства прямо в конструкторе.

class User {
    public function __construct(
        private string $name,
        private int $age
    ) {}
}

Снижает объем шаблонного кода и повышает читаемость.


Nullsafe Operator

Nullsafe оператор упрощает работу с цепочками объектов.

$user?->profile?->avatar;

Если любое значение в цепочке равно null, выражение возвращает null без ошибок.


PHP 8.1

Год выпуска: 2021

PHP 8.1 стал версией, в которой язык получил новые возможности моделирования данных и улучшения типизации.

Основные изменения

  • Enums;
  • Fibers;
  • readonly properties;
  • intersection types;
  • first-class callable syntax;
  • never return type;
  • улучшения производительности.

Enums

enum Status {
    case Active;
    case Inactive;
}

Enums позволили заменить наборы констант более безопасной структурой.


Readonly properties

class User {
    public function __construct(
        public readonly string $name
    ) {}
}

После инициализации такие свойства нельзя изменить.


Fibers

Fibers предоставляют низкоуровневую поддержку кооперативной многозадачности.

Они стали основой для будущих асинхронных решений.


PHP 8.2

Год выпуска: 2022

PHP 8.2 сфокусировался на ужесточении модели типов и удалении устаревших возможностей.

Основные изменения

  • readonly classes;
  • disallow dynamic properties;
  • standalone null/true/false types;
  • улучшения производительности;
  • атрибут #[SensitiveParameter].

Readonly classes

readonly class Config {
    public function __construct(
        public string $dsn
    ) {}
}

Все свойства класса становятся неизменяемыми.


Удаление динамических свойств

Динамическое добавление свойств стало deprecated:

$user->newProp = 123;

Это изменение направлено на повышение предсказуемости кода.


PHP 8.3

Год выпуска: 2023

PHP 8.3 продолжил развитие типизации и улучшение стандартной библиотеки.

Основные изменения

  • typed class constants;
  • json_validate();
  • атрибут #[Override];
  • улучшения работы с массивами;
  • оптимизации производительности;
  • улучшения random extension.

Typed class constants

class Example {
    public const string TYPE = "demo";
}

json_validate()

Позволяет проверить JSON без декодирования.

if (json_validate($json)) {
}

Override attribute

class ParentClass {
    public function run() {}
}

class ChildClass extends ParentClass {
    #[Override]
    public function run() {}
}

PHP 8.4

Год выпуска: 2024

PHP 8.4 продолжил развитие языка в сторону удобства, выразительности и уменьшения шаблонного кода.

Основные изменения

  • Property Hooks;
  • асимметричная видимость свойств;
  • lazy objects;
  • улучшения DOM API;
  • расширение возможностей стандартной библиотеки;
  • дальнейшая оптимизация JIT и Zend Engine.

Property Hooks

Позволяют добавлять логику к свойствам без явных getter/setter методов.

class User {
    public string $name {
        get => strtoupper($this->name);
        set => $this->name = $value;
    }
}

Asymmetric visibility

class User {
    public private(set) string $email;
}

Сравнение PHP 8.x

Версия Ключевые изменения
PHP 8.0 JIT, match, attributes, union types
PHP 8.1 enums, fibers, readonly
PHP 8.2 readonly classes, stricter types
PHP 8.3 typed class constants, json_validate
PHP 8.4 property hooks, lazy objects

Итоги PHP 8

PHP 8 стал завершением долгого пути эволюции языка:

  • строгая и выразительная система типов;
  • современный синтаксис;
  • встроенные метаданные;
  • улучшенная производительность;
  • развитие конкурентных механизмов выполнения;
  • постепенное устранение устаревших возможностей.

PHP окончательно закрепился как современный язык серверной разработки, подходящий для сложных корпоративных систем, микросервисов и высоконагруженных API.

  • 29.06.2026