PHP 8.6: 新增 SortDirection Enum
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;
}
}