PHP 8.4.2 Released!

Sérialisation

Les énumérations sont sérialisées différemment des objets. En particulier, elles ont un nouveau code de sérialisation, "E", qui spécifie le nom du cas de l'énumération. La routine de désérialisation est alors en mesure d'utiliser ce code pour définir une variable à la valeur singleton existante. Cela garantit que :

<?php

Suit
::Hearts === unserialize(serialize(Suit::Hearts));

print
serialize(Suit::Hearts);
// E:11:"Suit:Hearts";
?>

Lors de la désérialisation, si un enum et un cas ne peuvent pas être trouvés pour correspondre à une valeur sérialisée, un avertissement sera émis et un false sera retourné.

Si une Enum pure est sérialisée en JSON, une erreur sera générée. Si une Enum avec valeur de base est sérialisée en JSON, elle sera représentée par sa valeur scalaire uniquement, dans le type approprié. Le comportement des deux peut être surchargé en implémentant la méthode JsonSerializable.

Pour print_r(), la sortie d'un cas d'enum est légèrement différente de celle des objets afin de minimiser la confusion.

<?php

enum Foo {
case
Bar;
}

enum
Baz: int {
case
Beep = 5;
}

print_r(Foo::Bar);
print_r(Baz::Beep);

/* Produces

Foo Enum (
[name] => Bar
)
Baz Enum:int {
[name] => Beep
[value] => 5
}
*/
?>
add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top