Serializable.php 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. declare(strict_types=1);
  3. namespace Yansongda\Supports\Traits;
  4. trait Serializable
  5. {
  6. public function __serialize(): array
  7. {
  8. if (method_exists($this, 'toArray')) {
  9. return $this->toArray();
  10. }
  11. return [];
  12. }
  13. public function __unserialize(array $data): void
  14. {
  15. $this->unserializeArray($data);
  16. }
  17. public function __toString(): string
  18. {
  19. return $this->toJson();
  20. }
  21. public function serialize(): ?string
  22. {
  23. return serialize($this);
  24. }
  25. public function unserialize($data): void
  26. {
  27. unserialize($data);
  28. }
  29. /**
  30. * toJson.
  31. */
  32. public function toJson(int $option = JSON_UNESCAPED_UNICODE): string
  33. {
  34. return json_encode($this->__serialize(), $option);
  35. }
  36. /**
  37. * @return mixed
  38. */
  39. #[\ReturnTypeWillChange]
  40. public function jsonSerialize()
  41. {
  42. return $this->__serialize();
  43. }
  44. public function unserializeArray(array $data): self
  45. {
  46. foreach ($data as $key => $item) {
  47. if (method_exists($this, 'set')) {
  48. $this->set($key, $item);
  49. }
  50. }
  51. return $this;
  52. }
  53. }