HaPHPiness - Лучшее в PHP
Этот гайд вдохновлен ресурсом haphpiness.com и подчеркивает современные возможности, которые делают PHP отличным языком для разработки.
Современные возможност и языка
1. Named Arguments / Именованные аргументы (PHP 8.0)
Именованные аргументы позволяют передавать значения в функцию, указывая имя параметра. Это избавляет от необходимости следить за порядком аргументов.
// После: именованные аргументы
htmlspecialchars($string, double_encode: false);
2. Union Types (PHP 8.0) и Intersection Types (PHP 8.1)
Union Types (объединения) позволяют переменным иметь несколько типов. Intersection Types (пересечения) требуют, чтобы значение удовлетворяло сразу нескольким типам.
// Union types
function process(int|string $input): void {}
// Intersection types
function save(Countable&Iterator $collection): void {}
3. Enums / Перечисления (PHP 8.1)
Полноценная поддержка перечислений, обеспечивающая типобезопасность для фиксированных наборов значений.
enum Status: string {
case Active = 'active';
case Inactive = 'inactive';
}
4. str_contains(), str_starts_with(), str_ends_with() (PHP 8.0)
Удобные и читаемые функции для стандартных операций со строками.
if (str_contains($url, 'https')) { ... }
if (str_starts_with($file, '/var/www')) { ... }
if (str_ends_with($file, '.php')) { ... }
5. Array Unpacking with String Keys / Распаковка массивов со строковыми ключами (PHP 8.1)
Оператор расширения (...) теперь работает со строковыми ключами, что делает слияние массивов лаконичным.
$config = [...$defaults, ...$custom];
6. Fibers / Файберы (PHP 8.1)
Легковесные корутины для реализации асинхронных примитивов без "callback hell".
$fiber = new Fiber(function (): void {
$value = Fiber::suspend('paused');
echo "Resumed with: $value";
});
8. Встроенный сервер разработки (php -S)
Для локальной разработки не требуется настройка Apache или Nginx. Просто запустите:
php -S localhost:8000
10. Arrow Functions / Стрелочные функции (PHP 7.4)
Краткий синтаксис для коротких замыканий с автоматическим захватом переменных из родительской области видимости.
$doubled = array_map(fn($n) => $n * 2, $numbers);
11. Match Expressions / Выражения Match (PHP 8.0)
Более мощная и безопасная альтернатива switch, использующая строгое сравнение и возвращающая значение.
$text = match($statusCode) {
200, 201 => 'Success',
404 => 'Not Found',
default => 'Unknown',
};
12. Null Coalescing Operator ?? и ??= / Оператор объединения с null (PHP 7.0+)
Удобный способ обработки значений по умолчанию и ленивой инициализации.
$username = $_GET['user'] ?? 'anonymous';
$this->logger ??= new NullLogger();
15. Readonly Properties and Classes / Readonly свойства и классы (PHP 8.1+)
Иммутабельность на уровне движка для свойств и целых классов.
readonly class Money {
public function __construct(public int $amount, public string $currency) {}
}