编程

PHP 8.6: 新增 SortDirection Enum

4 2026-05-28 06:27:00

PHP 8.6 在全局命名空间中引入了一个名为 SortDirection 新枚举,其作为简单的、始终可用的枚举可以被核心函数和用户空间 PHP 应用调用。

SortDirection 枚举是一个单位枚举,也就是说该枚举的每一个元素都没有一个对应的标量值,如  ASC 或者 DESC。PHP 应用可以推断 Enum 元素的相应的特定域标量值。

新增 SortDirection Enum

enum SortDirection {
    case Ascending;
    case Descending;
}

声明有意简单化,并且各个 Enum case 不包含字符串或 int 支持的值,因此可以在系统边界推断出特定于域的支持值。

枚举是在全局命名空间中声明的。 

用例

需要使用新的 SortDirection 枚举的 PHP 应用可以将其定义为一种类型。当需要其支持的值时,可以考虑使用 match 表达式:

class QueryBuilder {

    private SortDirection $sort;

    public function setSort(SortDirection $sort): void {
        $this->sort = $sort;
    }

    private function getSortKeyword(): string {
        return match($this->sort) {
            SortDirection::Ascending => 'ASC',
            SortDirection::Descending => 'DESC',
        };
    }
}

验证排序方向的函数现在可以通过类型系统,利用新的 SortDirection 枚举来实现这一功能:

- function myCustomSort(string $direction): void {
+ function myCustomSort(SortDirection $direction): void {
-   if ($direction !== 'ASC' && $direction !== 'DESC') {
-       throw new \InvalidArgumentException('$direction must be either ASC or DESC');
-   }
+ // No further validation necessary.
}

向后兼容性影响

SortDirection 是在全局命名空间中声明的一个新枚举。除非 PHP 应用已经声明了 SortDirection 类或枚举,否则此更改不会影响向后兼容性。

在 PHP 8.1(支持枚举的最低 PHP 版本)或更高版本上运行的 PHP 应用可以轻松地为这个枚举提供 polyfill:

if (!enum_exists('SortDirection')) {
    enum SortDirection {
        case Ascending;
        case Descending;
    }
}