type-tools-php

Форк
0
/
UniqueExtractor.php 
85 строк · 2.6 Кб
1
<?php
2

3
declare(strict_types=1);
4

5
namespace Smoren\TypeTools;
6

7
use Closure;
8
use Generator;
9

10
/**
11
 * Tool for extracting unique IDs and hashes of any PHP variables and data structures.
12
 */
13
class UniqueExtractor
14
{
15
    /**
16
     * Returns unique ID string of given variable by its value and type.
17
     *
18
     * If $strict is true:
19
     *  - scalars: result is unique strictly by type;
20
     *  - objects: result is unique by instance;
21
     *  - arrays: result is unique by serialized value;
22
     *  - resources: result is unique by instance.
23
     *
24
     * If $strict is false:
25
     *  - scalars: result is unique by value;
26
     *  - objects: result is unique by serialized value;
27
     *  - arrays: result is unique by serialized value.
28
     *  - resources: result is unique by instance.
29
     *
30
     * @param mixed $var
31
     * @param bool $strict
32
     *
33
     * @return string
34
     */
35
    public static function getString($var, bool $strict): string
36
    {
37
        switch (true) {
38
            case is_array($var):
39
                return 'array_'.serialize($var);
40
            case is_resource($var):
41
                return 'resource_'.get_resource_type($var).'_'.(string)$var;
42
            case $var instanceof Generator:
43
                return 'generator_'.spl_object_id($var);
44
            case $var instanceof Closure:
45
                return 'closure_'.spl_object_id($var);
46
            case is_object($var):
47
                return 'object_'.($strict ? spl_object_id($var) : serialize($var));
48
            case gettype($var) === 'boolean':
49
                return 'boolean_'.(int)$var;
50
            case $strict:
51
                return gettype($var).'_'.$var;
52
            case !$var:
53
                return 'boolean_0';
54
            case strval($var) === '1':
55
                return 'boolean_1';
56
            case is_numeric($var):
57
                return 'numeric_'.(float)$var;
58
            default:
59
                return 'scalar_'.$var;
60
        }
61
    }
62

63
    /**
64
     * Returns unique md5 hash string of given variable by its value and type.
65
     *
66
     * If $strict is true:
67
     *  - scalars: result is unique strictly by type;
68
     *  - objects: result is unique by instance;
69
     *  - arrays: result is unique by serialized value.
70
     *
71
     * If $strict is false:
72
     *  - scalars: result is unique by value;
73
     *  - objects: result is unique by serialized value;
74
     *  - arrays: result is unique by serialized value.
75
     *
76
     * @param mixed $var
77
     * @param bool $strict
78
     *
79
     * @return string
80
     */
81
    public static function getHash($var, bool $strict): string
82
    {
83
        return md5(static::getString($var, $strict));
84
    }
85
}
86

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.