rel*_*89n 27 php enums php-8.1
我想知道为什么不可能提供__toString枚举的实现。
IDE 提示“Enum 可能不包含 '__toString'”。然而,这是我创建枚举后首先想到的事情。以前,我在代码中使用值对象封装字符串,必要时使用字符串转换。现在我想将它们迁移到枚举中,但它们会抵制。
#[Immutable]
enum SaveKlinesFromApiQueue: string
{
case DEFAULT = 'save_klines_from_api_queue';
case PRIORITY = 'save_klines_from_api_priority_queue';
public function __toString(): string
{
return $this->value;
}
}
Run Code Online (Sandbox Code Playgroud)
小智 13
const我认为如果你想像在常规类中一样使用 Enum ,你不应该使用它。考虑创建一个抽象类,如下所示:
abstract class SaveKlinesFromApiQueue
{
public const DEFAULT = 'save_klines_from_api_queue';
public const PRIORITY = 'save_klines_from_api_priority_queue';
}
Run Code Online (Sandbox Code Playgroud)
除了正确使用 Enum 之外,在您的情况下您还可以使用:
echo SaveKlinesFromApiQueue::DEFAULT->name;
Run Code Online (Sandbox Code Playgroud)
Result: "DEFAULT"
或者
echo SaveKlinesFromApiQueue::DEFAULT->value;
Run Code Online (Sandbox Code Playgroud)
Result: "save_klines_from_api_queue"
正如克里斯提到的,魔法方法是不被允许的。
对于 2 个最(?)常见的用例:
要获取单个字符串值,您可以使用->value.
如果您想要所有这些的字符串值,只需在方法中添加一个循环:
public static function strings(): array
{
$strings = [];
foreach(self::cases() as $case) {
$strings[] = $case->value;
}
return $strings;
}
Run Code Online (Sandbox Code Playgroud)