You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
3.8 KiB

3 years ago
  1. Opis Closure
  2. ====================
  3. [![Tests](https://github.com/opis/closure/workflows/Tests/badge.svg)](https://github.com/opis/closure/actions)
  4. [![Latest Stable Version](https://poser.pugx.org/opis/closure/v/stable.png)](https://packagist.org/packages/opis/closure)
  5. [![Latest Unstable Version](https://poser.pugx.org/opis/closure/v/unstable.png)](https://packagist.org/packages/opis/closure)
  6. [![License](https://poser.pugx.org/opis/closure/license.png)](https://packagist.org/packages/opis/closure)
  7. Serializable closures
  8. ---------------------
  9. **Opis Closure** is a library that aims to overcome PHP's limitations regarding closure
  10. serialization by providing a wrapper that will make all closures serializable.
  11. **The library's key features:**
  12. - Serialize any closure
  13. - Serialize arbitrary objects
  14. - Doesn't use `eval` for closure serialization or unserialization
  15. - Works with any PHP version that has support for closures
  16. - Supports PHP 7 syntax
  17. - Handles all variables referenced/imported in `use()` and automatically wraps all referenced/imported closures for
  18. proper serialization
  19. - Handles recursive closures
  20. - Handles magic constants like `__FILE__`, `__DIR__`, `__LINE__`, `__NAMESPACE__`, `__CLASS__`,
  21. `__TRAIT__`, `__METHOD__` and `__FUNCTION__`.
  22. - Automatically resolves all class names, function names and constant names used inside the closure
  23. - Track closure's residing source by using the `#trackme` directive
  24. - Simple and very fast parser
  25. - Any error or exception, that might occur when executing an unserialized closure, can be caught and treated properly
  26. - You can serialize/unserialize any closure unlimited times, even those previously unserialized
  27. (this is possible because `eval()` is not used for unserialization)
  28. - Handles static closures
  29. - Supports cryptographically signed closures
  30. - Provides a reflector that can give you information about the serialized closure
  31. - Provides an analyzer for *SuperClosure* library
  32. - Automatically detects when the scope and/or the bound object of a closure needs to be serialized
  33. in order for the closure to work after deserialization
  34. ## Documentation
  35. The full documentation for this library can be found [here][documentation].
  36. ## License
  37. **Opis Closure** is licensed under the [MIT License (MIT)][license].
  38. ## Requirements
  39. * PHP ^5.4 || ^7.0 || ^8.0
  40. ## Installation
  41. **Opis Closure** is available on [Packagist] and it can be installed from a
  42. command line interface by using [Composer].
  43. ```bash
  44. composer require opis/closure
  45. ```
  46. Or you could directly reference it into your `composer.json` file as a dependency
  47. ```json
  48. {
  49. "require": {
  50. "opis/closure": "^3.5"
  51. }
  52. }
  53. ```
  54. ### Migrating from 2.x
  55. If your project needs to support PHP 5.3 you can continue using the `2.x` version
  56. of **Opis Closure**. Otherwise, assuming you are not using one of the removed/refactored classes or features(see
  57. [CHANGELOG]), migrating to version `3.x` is simply a matter of updating your `composer.json` file.
  58. ### Semantic versioning
  59. **Opis Closure** follows [semantic versioning][SemVer] specifications.
  60. ### Arbitrary object serialization
  61. We've added this feature in order to be able to support the serialization of a closure's bound object.
  62. The implementation is far from being perfect, and it's really hard to make it work flawless.
  63. We will try to improve this, but we can't guarantee anything.
  64. So our advice regarding the `Opis\Closure\serialize|unserialize` functions is to use them with caution.
  65. [documentation]: https://www.opis.io/closure "Opis Closure"
  66. [license]: http://opensource.org/licenses/MIT "MIT License"
  67. [Packagist]: https://packagist.org/packages/opis/closure "Packagist"
  68. [Composer]: https://getcomposer.org "Composer"
  69. [SemVer]: http://semver.org/ "Semantic versioning"
  70. [CHANGELOG]: https://github.com/opis/closure/blob/master/CHANGELOG.md "Changelog"