Serializable.php 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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(string $data): void
  26. {
  27. unserialize($data);
  28. }
  29. public function toJson(int $option = JSON_UNESCAPED_UNICODE): string
  30. {
  31. return json_encode($this->__serialize(), $option);
  32. }
  33. public function jsonSerialize(): array
  34. {
  35. return $this->__serialize();
  36. }
  37. public function unserializeArray(array $data): self
  38. {
  39. foreach ($data as $key => $item) {
  40. if (method_exists($this, 'set')) {
  41. $this->set(strval($key), $item);
  42. }
  43. }
  44. return $this;
  45. }
  46. }