gpt4 book ai didi

php - 通过纯枚举实现 JsonSerialized

转载 作者:行者123 更新时间:2023-12-02 18:28:19 24 4
gpt4 key购买 nike

根据PHP手册

If a Pure Enum is serialized to JSON, an error will be thrown. If a Backed Enum is serialized to JSON, it will be represented by its value scalar only, in the appropriate type. The behavior of both may be overridden by implementing JsonSerializable

让我们尝试实现JsonSerialized

enum Suit implements JsonSerializable
{
case Hearts;
case Diamonds;
case Clubs;
case Spades;

public function jsonSerialize(): array {
return [1, 2, 3, 4];
}
}

echo json_encode(Suit::cases());

它打印:

[[1,2,3,4],[1,2,3,4],[1,2,3,4],[1,2,3,4]]

为什么[1,2,3,4]重复4次?

如何在序列化期间控制枚举中的每种情况?

最佳答案

enum中,每个case都是该enum的一个对象实例。这意味着 JsonSerialized 是由它们中的每一个实现的。 Suit::cases() 将返回枚举中所有案例的打包数组(也称为对象),因此将对每个案例调用 jsonSerialize 方法,因此会出现重复的数组.

如何在序列化过程中控制枚举中的每个案例?

我们可以简单地使用match表达式

public function jsonSerialize(): string {
return match($this) {
Suit::Hearts => 'H',
Suit::Diamonds => 'D',
Suit::Clubs => 'C',
Suit::Spades => 'S'
};
}

它打印:

["H","D","C","S"]

关于php - 通过纯枚举实现 JsonSerialized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69799102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com