Вход Регистрация
Файл: vendor/laravel/serializable-closure/src/Serializers/Signed.php
Строк: 75
<?php

namespace LaravelSerializableClosureSerializers;

use 
LaravelSerializableClosureContractsSerializable;
use 
LaravelSerializableClosureExceptionsInvalidSignatureException;
use 
LaravelSerializableClosureExceptionsMissingSecretKeyException;

class 
Signed implements Serializable
{
    
/**
     * The signer that will sign and verify the closure's signature.
     *
     * @var LaravelSerializableClosureContractsSigner|null
     */
    
public static $signer;

    
/**
     * The closure to be serialized/unserialized.
     *
     * @var Closure
     */
    
protected $closure;

    
/**
     * Creates a new serializable closure instance.
     *
     * @param  Closure  $closure
     * @return void
     */
    
public function __construct($closure)
    {
        
$this->closure $closure;
    }

    
/**
     * Resolve the closure with the given arguments.
     *
     * @return mixed
     */
    
public function __invoke()
    {
        return 
call_user_func_array($this->closurefunc_get_args());
    }

    
/**
     * Gets the closure.
     *
     * @return Closure
     */
    
public function getClosure()
    {
        return 
$this->closure;
    }

    
/**
     * Get the serializable representation of the closure.
     *
     * @return array
     */
    
public function __serialize()
    {
        if (! static::
$signer) {
            throw new 
MissingSecretKeyException();
        }

        return static::
$signer->sign(
            
serialize(new Native($this->closure))
        );
    }

    
/**
     * Restore the closure after serialization.
     *
     * @param  array  $signature
     * @return void
     *
     * @throws LaravelSerializableClosureExceptionsInvalidSignatureException
     */
    
public function __unserialize($signature)
    {
        if (static::
$signer && ! static::$signer->verify($signature)) {
            throw new 
InvalidSignatureException();
        }

        
/** @var LaravelSerializableClosureContractsSerializable $serializable */
        
$serializable unserialize($signature['serializable']);

        
$this->closure $serializable->getClosure();
    }
}
Онлайн: 1
Реклама