PHP Classes

File: vendor/opis/closure/README.md

Recommend this page to a friend!
  Classes of Abed Nego Ragil Putra   PHP Inventory Management System with Scanner   vendor/opis/closure/README.md   Download  
File: vendor/opis/closure/README.md
Role: Documentation
Content type: text/markdown
Description: Documentation
Class: PHP Inventory Management System with Scanner
Manage inventory stock using scanner application
Author: By
Last change:
Date: 4 years ago
Size: 4,102 bytes
 

Contents

Class file image Download

Opis Closure

Build Status Latest Stable Version Latest Unstable Version License

Serializable closures

Opis Closure is a library that aims to overcome PHP's limitations regarding closure serialization by providing a wrapper that will make all closures serializable.

The library's key features:

  • Serialize any closure
  • Serialize arbitrary objects
  • Doesn't use `eval` for closure serialization or unserialization
  • Works with any PHP version that has support for closures
  • Supports PHP 7 syntax
  • Handles all variables referenced/imported in `use()` and automatically wraps all referenced/imported closures for proper serialization
  • Handles recursive closures
  • Handles magic constants like `__FILE__`, `__DIR__`, `__LINE__`, `__NAMESPACE__`, `__CLASS__`, `__TRAIT__`, `__METHOD__` and `__FUNCTION__`.
  • Automatically resolves all class names, function names and constant names used inside the closure
  • Track closure's residing source by using the `#trackme` directive
  • Simple and very fast parser
  • Any error or exception, that might occur when executing an unserialized closure, can be caught and treated properly
  • You can serialize/unserialize any closure unlimited times, even those previously unserialized (this is possible because `eval()` is not used for unserialization)
  • Handles static closures
  • Supports cryptographically signed closures
  • Provides a reflector that can give you information about the serialized closure
  • Provides an analyzer for SuperClosure library
  • Automatically detects when the scope and/or the bound object of a closure needs to be serialized in order for the closure to work after deserialization

Documentation

The full documentation for this library can be found [here][documentation].

License

Opis Closure is licensed under the [MIT License (MIT)][license].

Requirements

  • PHP ^5.4 || ^7.0

Installation

Opis Closure is available on [Packagist] and it can be installed from a command line interface by using [Composer].

composer require opis/closure

Or you could directly reference it into your composer.json file as a dependency

{
    "require": {
        "opis/closure": "^3.4"
    }
}

Migrating from 2.x

If your project needs to support PHP 5.3 you can continue using the 2.x version of Opis Closure. Otherwise, assuming you are not using one of the removed/refactored classes or features(see [CHANGELOG]), migrating to version 3.x is simply a matter of updating your composer.json file.

Semantic versioning

Opis Closure follows [semantic versioning][SemVer] specifications.

Arbitrary object serialization

This feature was primarily introduced in order to support serializing an object bound to a closure and available via $this. The implementation is far from being perfect and it's really hard to make it work flawless. I will try to improve this, but I can not guarantee anything. So my advice regarding the Opis\Closure\serialize|unserialize functions is to use them with caution.

SuperClosure support

Opis Closure is shipped with an analyzer(Opis\Closure\Analyzer) which aims to provide Opis Closure's parsing precision and speed to [SuperClosure].

[documentation]: https://www.opis.io/closure "Opis Closure" [license]: http://opensource.org/licenses/MIT "MIT License" [Packagist]: https://packagist.org/packages/opis/closure "Packagist" [Composer]: https://getcomposer.org "Composer" [SuperClosure]: https://github.com/jeremeamia/super_closure "SuperClosure" [SemVer]: http://semver.org/ "Semantic versioning" [CHANGELOG]: https://github.com/opis/closure/blob/master/CHANGELOG.md "Changelog"