UnsignedSerializableClosure.php 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <?php
  2. namespace Laravel\SerializableClosure;
  3. use Closure;
  4. class UnsignedSerializableClosure
  5. {
  6. /**
  7. * The closure's serializable.
  8. *
  9. * @var \Laravel\SerializableClosure\Contracts\Serializable
  10. */
  11. protected $serializable;
  12. /**
  13. * Creates a new serializable closure instance.
  14. *
  15. * @param \Closure $closure
  16. * @return void
  17. */
  18. public function __construct(Closure $closure)
  19. {
  20. $this->serializable = new Serializers\Native($closure);
  21. }
  22. /**
  23. * Resolve the closure with the given arguments.
  24. *
  25. * @return mixed
  26. */
  27. public function __invoke()
  28. {
  29. return call_user_func_array($this->serializable, func_get_args());
  30. }
  31. /**
  32. * Gets the closure.
  33. *
  34. * @return \Closure
  35. */
  36. public function getClosure()
  37. {
  38. return $this->serializable->getClosure();
  39. }
  40. /**
  41. * Get the serializable representation of the closure.
  42. *
  43. * @return array{serializable: \Laravel\SerializableClosure\Contracts\Serializable}
  44. */
  45. public function __serialize()
  46. {
  47. return [
  48. 'serializable' => $this->serializable,
  49. ];
  50. }
  51. /**
  52. * Restore the closure after serialization.
  53. *
  54. * @param array{serializable: \Laravel\SerializableClosure\Contracts\Serializable} $data
  55. * @return void
  56. */
  57. public function __unserialize($data)
  58. {
  59. $this->serializable = $data['serializable'];
  60. }
  61. }