Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
4 / 4
CRAP
100.00% covered (success)
100.00%
1 / 1
SerializedPhpObject
100.00% covered (success)
100.00%
10 / 10
100.00% covered (success)
100.00%
4 / 4
5
100.00% covered (success)
100.00%
1 / 1
 parse
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 createFromPhpObject
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 validate
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
2
 toPhpObject
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2namespace Apie\Serializer\ValueObjects;
3
4use Apie\Core\ValueObjects\Interfaces\AllowsLargeStringsInterface;
5use Apie\Core\ValueObjects\Interfaces\StringValueObjectInterface;
6use Apie\Core\ValueObjects\IsStringValueObject;
7use function Opis\Closure\init;
8use function Opis\Closure\serialize;
9use function Opis\Closure\set_security_provider;
10use function Opis\Closure\unserialize;
11
12final class SerializedPhpObject implements StringValueObjectInterface, AllowsLargeStringsInterface
13{
14    use IsStringValueObject;
15
16    /** @var array<string, mixed> */
17    private static array $alreadyParsed = [];
18
19    private static function parse(string $input): void
20    {
21        init(null);
22        set_security_provider(null);
23        self::$alreadyParsed[$input] = unserialize($input);
24    }
25
26    public static function createFromPhpObject(mixed $input): self
27    {
28        $inputString = serialize($input);
29        self::$alreadyParsed[$inputString] = $input;
30        return self::fromNative($inputString);
31    }
32
33    public static function validate(string $input): void
34    {
35        if (!isset(self::$alreadyParsed[$input])) {
36            self::parse($input);
37        }
38    }
39
40    public function toPhpObject(): mixed
41    {
42        self::parse($this->internal);
43        return self::$alreadyParsed[$this->internal];
44    }
45}