SplQueue.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. declare(strict_types=1);
  3. namespace Laminas\Stdlib;
  4. use ReturnTypeWillChange;
  5. use Serializable;
  6. use UnexpectedValueException;
  7. use function is_array;
  8. use function serialize;
  9. use function sprintf;
  10. use function unserialize;
  11. /**
  12. * Serializable version of SplQueue
  13. *
  14. * @template TKey of array-key
  15. * @template TValue
  16. * @extends \SplQueue<TValue>
  17. */
  18. class SplQueue extends \SplQueue implements Serializable
  19. {
  20. /**
  21. * Return an array representing the queue
  22. *
  23. * @return list<TValue>
  24. */
  25. public function toArray()
  26. {
  27. $array = [];
  28. foreach ($this as $item) {
  29. $array[] = $item;
  30. }
  31. return $array;
  32. }
  33. /**
  34. * Serialize
  35. *
  36. * @return string
  37. */
  38. #[ReturnTypeWillChange]
  39. public function serialize()
  40. {
  41. return serialize($this->__serialize());
  42. }
  43. /**
  44. * Magic method used for serializing of an instance.
  45. *
  46. * @return list<TValue>
  47. */
  48. #[ReturnTypeWillChange]
  49. public function __serialize()
  50. {
  51. return $this->toArray();
  52. }
  53. /**
  54. * Unserialize
  55. *
  56. * @param string $data
  57. * @return void
  58. */
  59. #[ReturnTypeWillChange]
  60. public function unserialize($data)
  61. {
  62. $toUnserialize = unserialize($data);
  63. if (! is_array($toUnserialize)) {
  64. throw new UnexpectedValueException(sprintf(
  65. 'Cannot deserialize %s instance; corrupt serialization data',
  66. self::class
  67. ));
  68. }
  69. $this->__unserialize($toUnserialize);
  70. }
  71. /**
  72. * Magic method used to rebuild an instance.
  73. *
  74. * @param array<array-key, TValue> $data Data array.
  75. * @return void
  76. */
  77. #[ReturnTypeWillChange]
  78. public function __unserialize($data)
  79. {
  80. foreach ($data as $item) {
  81. $this->push($item);
  82. }
  83. }
  84. }