# История PHP: От создания до актуальной версии 8.3

- Canonical: https://asgru.com/ru/istoriya-php-ot-sozdaniya-do-aktualnoj-versii-8-3/
- Language: ru
- Author: asgru
- Published: 2024-09-05T04:57:47+02:00
- Updated: 2024-09-05T04:57:47+02:00

PHP — один из самых популярных языков программирования для веб-разработки. С момента своего создания в 1994 году он прошел огромный путь, превратившись из простого инструмента для динамических веб-страниц в мощный, высокопроизводительный и универсальный язык программирования. Рассмотрим основные этапы его развития и подробно обсудим ключевые изменения в версиях 8.0, 8.1, 8.2 и 8.3.

### Этапы развития PHP

#### 1995: Рождение PHP/FI 1.0

PHP был создан датским программистом Расмусом Лердорфом в 1994 году как набор Perl-скриптов для отслеживания посещений его резюме на веб-сайте. В 1995 году он выпустил первую версию PHP/FI (Personal Home Page/Forms Interpreter), поддерживающую HTML-формы и взаимодействие с базами данных.

#### 1998: PHP 3.0 и революция в языке

С помощью Зева Сураски и Энди Гутманса PHP был полностью переписан, что привело к выходу версии PHP 3.0 в 1998 году. В ней появился новый движок Zend Engine, который значительно повысил производительность и гибкость языка. PHP 3 стал первым широко используемым вариантом языка, который поддерживал объектно-ориентированное программирование.

#### 2000: PHP 4.0 и появление Zend Engine

PHP 4 с Zend Engine 1.0 появился в 2000 году, предложив улучшенную производительность и поддержку сессий, что сделало PHP более подходящим для создания сложных динамических веб-приложений.

#### 2004: PHP 5.0 и новая эпоха ООП

PHP 5, выпущенный в 2004 году, ввел полную поддержку объектно-ориентированного программирования, улучшенное взаимодействие с базами данных через PDO (PHP Data Objects) и новую модель обработки исключений.

#### 2015: PHP 7.0 и значительное улучшение производительности

В 2015 году PHP 7.0 предложил новое поколение Zend Engine 3.0, что обеспечило удвоение скорости выполнения кода и добавило поддержку типизации аргументов функций и возвращаемых значений.

### PHP 8: Основные нововведения

PHP 8.0, выпущенный в ноябре 2020 года, стал важным шагом вперед благодаря множеству новых функций и улучшений, которые сделали язык более удобным, производительным и выразительным. Основные нововведения включают:

#### 1. JIT-компиляция (Just-in-time)

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

Пример:

<?php
function fibonacci($n) {
 if ($n == 0) return 0;
 if ($n == 1) return 1;
 return fibonacci($n-1) + fibonacci($n-2);
}

echo fibonacci(30);
?>

#### 2. Match Expression (Сопоставление с образцом)

match — это улучшенная версия оператора switch, которая использует строгую типизацию, не требует операторов break и может возвращать результат напрямую.

Пример использования match:

<?php
$status = 404;

$message = match ($status) {
 200 => 'OK',
 404 => 'Not Found',
 500 => 'Internal Server Error',
 default => 'Unknown Status',
};

echo $message; // Выведет: Not Found
?>

#### 3. Именованные аргументы

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

Пример:

<?php
function greet(string $name, string $greeting = 'Hello') {
 echo "$greeting, $name!";
}

greet(name: 'John', greeting: 'Welcome'); // Выведет: Welcome, John!
?>

#### 4. Union Types (Объединенные типы)

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

Пример:

<?php
function processInput(int|string $input) {
 if (is_int($input)) {
 return $input * 2;
 } else {
 return strtoupper($input);
 }
}

echo processInput(10); // Выведет: 20
echo processInput('hello'); // Выведет: HELLO
?>

#### 5. Constructor Property Promotion

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

Пример:

<?php
class Point {
 public function __construct(
 public int $x,
 public int $y
 ) {}
}

$point = new Point(3, 5);
echo $point->x; // Выведет: 3
?>

#### 6. Ошибки для некорректных указателей

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

Пример:

<?php
$data = [];
echo $data['key']; // Fatal Error: Uncaught Error: Undefined array key "key"
?>

### PHP 8.1: Важные нововведения

PHP 8.1, выпущенный в ноябре 2021 года, добавил множество важных функций и улучшений, таких как перечисления, фибры и readonly-свойства.

#### 1. Enums (Перечисления)

Перечисления (enum) позволяют определять фиксированный набор значений, которые используются в коде.

Пример:

<?php
enum Status {
 case Pending;
 case Completed;
 case Failed;
}

function handleStatus(Status $status) {
 return match ($status) {
 Status::Pending => 'Pending',
 Status::Completed => 'Completed',
 Status::Failed => 'Failed',
 };
}

echo handleStatus(Status::Pending); // Выведет: Pending
?>

#### 2. Фибры (Fibers)

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

Пример:

<?php
$fiber = new Fiber(function() {
 $value = Fiber::suspend('fiber suspended');
 echo "Resumed: $value\n";
});

echo $fiber->start(); // Выведет: fiber suspended
$fiber->resume('resume value'); // Выведет: Resumed: resume value
?>

#### 3. Readonly Properties

Свойства readonly можно инициализировать только при создании объекта, после чего они становятся неизменяемыми.

Пример:

<?php
class User {
 public readonly string $name;

 public function __construct(string $name) {
 $this->name = $name;
 }
}

$user = new User('Alice');
// $user->name = 'Bob'; // Ошибка, так как свойство readonly
?>

### PHP 8.2: Продолжение улучшений

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

#### 1. Readonly-классы

PHP 8.2 позволяет объявлять классы как readonly, что автоматически делает все их свойства неизменяемыми.

Пример:

<?php
readonly class Product {
 public function __construct(
 public string $name,
 public float $price
 ) {}
}

$product = new Product('Laptop', 1200.00);
// $product->price = 1300.00; // Ошибка, так как класс readonly
?>

#### 2. Deprecation динамических свойств

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

Пример:

<?php
class User {}

$user = new User();
$user->name = 'John'; // Deprecated: dynamic properties are deprecated
?>

#### 3. Поддержка null, false и true в объединенных типах

Теперь можно указывать null, false и true в качестве типов в объединенных типах.

Пример:

<?php
function test(null|false|string $value): string {
 return $value === null ? 'null' : ($value === false ? 'false' : $value);
}

echo test(null); // Выведет: null
echo test(false); // Выведет: false
echo test('test'); // Выведет: test
?>

### PHP 8.3: Новейшие улучшения

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

#### 1. json_validate

Добавлена новая функция json_validate, которая позволяет проверять корректность JSON-строки без её декодирования.

Пример:

<?php
$json = '{"name": "John", "age": 30}';
$is_valid = json_validate($json);
echo $is_valid ? 'Valid JSON' : 'Invalid JSON';
?>

#### 2. Typed Class Constants

Теперь можно объявлять типы для констант внутри классов, что усиливает типизацию.

Пример:

<?php
class Config {
 public const string NAME = 'Application';
}

echo Config::NAME; // Выведет: Application
?>

### Заключение

PHP 8.0 и более поздние версии принесли множество улучшений, которые значительно повысили производительность и выразительность языка. Начиная с JIT-компиляции и нововведений, таких как match, объединенные типы и фибры, и до последних улучшений в PHP 8.3, язык продолжает развиваться и адаптироваться к требованиям современных веб-приложений, оставаясь ключевым инструментом для миллионов разработчиков по всему миру.

Для всех моих подписчиков у меня отличные новости! 🎉 При оплате продуктов JetBrains вы можете использовать специальный промокод «Asgru24» и получить скидку 25% на любой продукт! Не упустите возможность сэкономить на лучших инструментах для разработки.
