php

PHP 枚举:是时候告别老式类常量了

dafenqi
2024-01-04 / 0 评论 / 7 阅读 / 正在检测是否收录...

PHP 枚举:是时候告别老式类常量了

枚举在 PHP 中已经引入两年了,如果您还在使用类常量来表示枚举值,那么是时候切换到 PHP 枚举了。以下是四个令人信服的理由。

1、内置“cases”方法

想象一下,您正在开发一个具有不同用户状态的项目。有些是活跃的,有些是禁止的,还有一些尚未完成注册。以老式的方式,您可以使用类常量处理这些状态,从而产生如下代码:

lqz76ak2.png

all方法之所以存在,是因为它满足了一个非常常见的需求:在下拉菜单中显示所有可能的选项。您可以通过创建自己的方法或使用反射来实现这一点。

现在,让我们看看枚举如何简化这一过程:

lqz76jcm.png

使用枚举,您可以使用内置的“cases”方法,它会自动返回所有可用选项的数组。告别每次添加新状态时手动更新常用选项列表。

lqz76oze.png

2、类型提示

回到用户状态的示例,让我们考虑一种情况,我们有一种设置用户状态的方法。我们希望只将有效状态存储在数据库中。它通常是这样的:

lqz76tc3.png

看起来有点难看。我们有更好的解决方案!

lqz76zxm.png

通过类型提示,我们可以确保只有来自 UserStatus 枚举的有效状态值才能传递给方法参数。这可以消除潜在的错误,例如使用无效状态值引起的问题。

3、枚举方法

我将继续使用带有用户状态的示例。假设有些人可以登录系统,有些人则不能。

老式的方式:

lqz7755w.png

使用枚举:

lqz779u1.png

虽然它不是“游戏规则改变者”,但它确实可以使代码更简洁、更紧凑。

4、独特性

这个与本主文的第二点略有重叠,但我想单独强调一下。

想象一下,我们不仅有用户的状态,还有我们在线商店中商品的状态。

lqz77mzs.png

让我们从前面的示例中获取一段代码,并以不当的方式使用它。

lqz77wyr.png

虽然我们不会收到错误,但这可能是一个潜在的问题。如果将来我们更改 ProductStatus::ACTIVE 常量的值,我们可能会在这里收到错误。

那么枚举呢?枚举是唯一的。

lqz781h4.png

即使 UserStatus::ACTIVE 和 ProductStatus::ACTIVE 具有相同的值,它也是不同的项目。我们可以轻松地手动检查。

lqz787bv.png

这意味着类型提示对我们有双重帮助——它不允许使用不正确的值,也不允许使用这些值的不正确来源,即使它们看起来合适。

0

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /www/wwwroot/testblog.58heshihu.com/var/Widget/Archive.php on line 1032

评论 (0)

取消