reagordi/serializable-closure

Reagordi Serializable Closure provides an easy and secure way to serialize closures in PHP.

1.0.0 2024-05-01 15:24 UTC

This package is auto-updated.

Last update: 2024-05-01 17:50:28 UTC


README

Reagordi

Reagordi Serializable Closure


Latest Stable Version Total Downloads Build status Code Coverage

Mutation testing badge

static analysis type-coverage psalm-level

Reagordi Serializable Closure provides an easy and secure way to serialize closures in PHP.

Requirements

  • PHP 8.2 or higher.

Installation

The package could be installed with composer:

composer require reagordi/serializable-closure

General usage

You may serialize a closure this way:

use Reagordi\Component\SerializableClosure\SerializableClosure;

$closure = fn () => 'james';

// Recommended
SerializableClosure::setSecretKey('secret');

$serialized = serialize(new SerializableClosure($closure));
$closure = unserialize($serialized)->getClosure();

echo $closure(); // james;

Caveats

  • Anonymous classes cannot be created within closures.
  • Attributes cannot be used within closures.
  • Serializing closures on REPL environments like Laravel Tinker is not supported.
  • Serializing closures that reference objects with readonly properties is not supported.

Testing

Unit testing

The package is tested with PHPUnit. To run tests:

./vendor/bin/phpunit

Mutation testing

The package tests are checked with Infection mutation framework with Infection Static Analysis Plugin. To run it:

./vendor/bin/roave-infection-static-analysis-plugin

Static analysis

The code is statically analyzed with Psalm. To run static analysis:

./vendor/bin/psalm

Code style

Use Rector to make codebase follow some specific rules or use either newest or any specific version of PHP:

./vendor/bin/rector

Dependencies

Use ComposerRequireChecker to detect transitive Composer dependencies.

License

The Reagordi Serializable Closure is free software. It is released under the terms of the BSD License. Please see LICENSE for more information.

Maintained by Reagordi Group.

Support the project

Open Collective

Follow updates

Official website Telegram