← Назад к вопросам

С какими версиями PHP работал?

1.0 Junior🔥 201 комментариев
#PHP Core#Опыт и карьера

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI21 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Версии PHP, с которыми работал

Сегодня работаю преимущественно с современными версиями PHP, но имею опыт со старыми версиями и знаю историю эволюции языка.

История работы

PHP 5.6 - 5.7 (2015-2019)

Мои первые серьезные проекты были на этих версиях. Помню:

  • Без type hints на параметры
  • Без strict_types
  • Без nullable types
  • mcrypt вместо sodium
  • Слабая типизация везде
// PHP 5.6 style
function getUserData($id) {  // Без типизации
    return DB::select('SELECT * FROM users WHERE id = ?', [$id]);
}

$result = getUserData('abc');  // Никаких ошибок

PHP 7.0 (2016-2018)

Большой скачок в эволюции языка:

  • Появились типизированные параметры
  • Появился return type hints
  • Throwable и exceptions
  • Spaceship operator <=> и null coalescing ??
// PHP 7.0 style
function getUser(int $id): User {  // Типизированы параметр и возврат
    return User::findOrFail($id);
}

PHP 7.1 - 7.4 (2018-2019)

Время стабильности и добавлений:

  • Nullable types: ?int, ?User
  • Union types (начиная с 7.2)
  • match выражение (в 8.0)
  • Typed properties (8.0)
// PHP 7.4 style - уже серьезная типизация
function processOrder(?Order $order): ?OrderResult {
    if (!$order) {
        return null;
    }
    return new OrderResult($order);
}

PHP 8.0 - 8.3 (2020-2023) - СЕЙЧАС

Самое время для современной разработки:

// PHP 8.0+ features

// 1. Named arguments
functionSendEmail(
    to: 'user@example.com',
    subject: 'Hello',
    body: 'Message'
);

// 2. Constructor property promotion
class User {
    public function __construct(
        public int $id,
        public string $name,
        public string $email
    ) {}
}

// 3. Attributes (Decorators)
#[Route('/users', methods: ['GET'])]
#[Auth(roles: ['admin'])]
public function getUsers() { }

// 4. Union types
function getId(int|string $value): int|string {
    return $value;
}

// 5. Match expressions
$result = match($status) {
    'pending' => 'Processing...',
    'completed' => 'Done!',
    'failed' => 'Error occurred',
    default => 'Unknown'
};

// 6. Nullsafe operator
$city = $user?->address?->city;  // Не упадет, если null

// 7. Enum (в 8.1)
enum Status {
    case Pending;
    case Completed;
    case Failed;
}

public function updateStatus(Status $status): void { }

// 8. Readonly properties (в 8.1)
class Configuration {
    public readonly string $apiKey;
    public readonly int $timeout;
}

// 9. Fibers (в 8.1) - асинхронность
Fiber::suspend();  // Паузируем выполнение

// 10. Disjunctive Normal Form Types (в 8.2)
function process(string|int|float|(Request&HasUri) $value) { }

Текущий стек (2024-2025)

Основное использование:

  • PHP 8.2 - 8.3 в new projects
  • PHP 8.1 в legacy projects
  • PHP 8.0 для совместимости с хостингом

Версия для production:

# Минимум PHP 8.1 для нового кода
# PHP 8.0 для совместимости
# PHP 7.4 только для очень старых проектов

Знакомство с версиями

PHP 5.6

  • ✅ Без type hints, но работает
  • ❌ Слабая типизация, много bugs
  • ❌ Медленно
  • ✅ Хороший для обучения

PHP 7.0

  • ✅ Появилась типизация
  • ✅ В 2x быстрее чем 5.6
  • ❌ Еще есть nullable issues

PHP 7.4

  • ✅ Хороший баланс
  • ✅ Type hints everywhere
  • ❌ Deprecated в 2021

PHP 8.0+

  • ✅ Modern PHP
  • ✅ Attributes, match, nullsafe
  • ✅ Named arguments
  • ✅ Union types
  • ✅ Enum support (8.1+)
  • ✅ Readonly properties (8.1+)

Breaking changes, которые помню

PHP 5.6 → 7.0

  • mcrypt deprecated (теперь sodium)
  • Static properties changed
  • Error handling (exceptions vs warnings)

PHP 7.0 → 7.2

  • count() требует Countable
  • Object property access

PHP 7.4 → 8.0

  • Weak comparisons more strict
  • Inheritance rules changed
  • new ClassName() vs new (ClassName)()

Миграция легаси кода

Если нужно апгрейдить старый проект:

// Шаг 1: с PHP 5.6 на 7.4
// - Добавить типизацию параметров
// - Добавить return types
// - Заменить mysql на mysqli/PDO

// Шаг 2: с PHP 7.4 на 8.0
// - Использовать match вместо switch
// - Использовать nullsafe operator
// - Миграция конфигов (если были)

// Шаг 3: с PHP 8.0 на 8.1+
// - Использовать enum
// - Использовать readonly
// - Использовать first-class callables

// Примерный процесс
php-cs-fixer fix ./app --rules=@PSR12
rectorphp process ./app --set php80
rectorphp process ./app --set php81

Framework versions

Laravel

  • Laravel 5.x работал на PHP 5.6-7.1
  • Laravel 6-7 требуют PHP 7.2+
  • Laravel 8-9 требуют PHP 7.3+
  • Laravel 10-11 требуют PHP 8.1+

Symfony

  • Symfony 3.x на PHP 5.5+
  • Symfony 4.x на PHP 7.1+
  • Symfony 5.x на PHP 7.2+
  • Symfony 6.x на PHP 8.0+

Performance разница

PHP 5.6:     baseline (1x)
PHP 7.0:     2x faster
PHP 7.4:     3-4x faster
PHP 8.0:     4-5x faster (JIT compilation)
PHP 8.3:     5-6x faster

Текущие рекомендации

Для new projects:       PHP 8.2 или 8.3
Для maintenance:        PHP 8.1 минимум
Для enterprise legacy:  PHP 8.0
Для очень старого:      PHP 7.4 (с миграцией планом)

НИКОГДА не используй:   PHP < 7.4

Что изменилось за 10+ лет

Тогда (PHP 5.6):              Сейчас (PHP 8.3):

index.php -> web root          App routing everywhere
Globals everywhere             Type hints everywhere
$_GET, $_POST directly         Validation layer first
MySQL extension                PDO/prepared statements
No version control             Git everywhere
Manual error handling          Exceptions as default
Dynamic typing dangers         Static type checking
Regular functions              OOP with interfaces
Raw SQL in code                Query builders/ORM
Manual caching                 Built-in caching
Simple strings                 Everything typed

Журнал эволюции PHP - это журнал эволюции профессионализма в веб-разработке.