我想知道为什么不能为enum提供__toString实现。
艾德说:"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;
}
}发布于 2022-07-14 13:52:59
我认为如果您想在常规类中像使用const一样使用Enum,就不应该使用Enum。考虑创建一个抽象类,而不是如下所示:
abstract class SaveKlinesFromApiQueue
{
public const DEFAULT = 'save_klines_from_api_queue';
public const PRIORITY = 'save_klines_from_api_priority_queue';
}除了正确使用Enum之外,在您的情况下,您还可以使用:
echo SaveKlinesFromApiQueue::DEFAULT->name;Result: "DEFAULT"
或
echo SaveKlinesFromApiQueue::DEFAULT->value;Result: "save_klines_from_api_queue"
发布于 2022-02-07 22:02:02
正如chris提到的,不允许使用神奇的方法。
最重要的两个(?)常用用法:
要获得单个字符串的值,只需使用->value即可。
如果您想要它们的字符串值,只需在方法中添加一个循环:
public static function strings(): array
{
$strings = [];
foreach(self::cases() as $case) {
$strings[] = $case->value;
}
return $strings;
}发布于 2022-10-07 14:34:10
对于简单的值Enum,使用"const“而不是"case":
enum SaveKlinesFromApiQueue: string {
const DEFAULT = 'save_klines_from_api_queue';
const PRIORITY = 'save_klines_from_api_priority_queue';
}
echo SaveKlinesFromApiQueue::DEFAULT;https://stackoverflow.com/questions/70235747
复制相似问题