Ранее:
Оглавления для удобной навигации по новым PHP 8.1 фичам (клик для перехода по якорю):
PHP 8.1: Enums - перечисления
Перечисления удобнее, чем просто константы:
<?php
declare(strict_types=1);
namespace App\Data\Enum;
enum Mode: string
{
case CLASSIC = 'classic';
case KILLER = 'killer';
case DAILY = 'daily';
case EVENT = 'event';
}
Enum представляет собой объект, что дает гибкость при использовании enum в аргументах. Если раньше в качестве аргумента передавали скалярную константу int/string, что зачастую может требовать дополнительной валидации внутри метода, то теперь в typehint можно указать сам Enum.
Кроме того, в тело enum можно помещать вспомогательные методы и использовать в них $this указатель на текущее значение.
Enum может быть двух типов:
- Pure enum. Имеет только pure cases без скалярных значений.
-
Backed enum. Имеет значения в
case, как в примере выше с enum Mode.
PHP 8.1: Readonly class properties
<?php
class AbTestDto
{
public readonly string $name;
public readonly string $distributionEnabled;
public readonly array $abGroups;
}
Благодаря readonly, можно 1) гарантировать иммутабельность объекта в рантайме. 2) Отпадает необходимость в psalm-аннотациях таких как @psalm-immutable