Enum constants are implicitly final

An enum cannot be extended, so every constant on it is final by construction and the keyword is redundant rather than forbidden.

enum OrderStatus: string
{
    case Pending = 'pending';
    case Shipped = 'shipped';

    const DEFAULT = self::Pending;      // a case as a constant
    const OPEN = [self::Pending];       // and an array of them
}

OrderStatus::DEFAULT;   // OrderStatus::Pending

// interface constants became overridable in 8.1, which is
// the change that made `final const` necessary elsewhere.

A constant whose value is a case is the idiomatic way to express a default, and it composes with the enum rather than sitting in a separate class. The contrast with interface constants is worth holding in mind: those became overridable in 8.1, so an interface constant is now a suggestion where an enum constant is a fact.