Session   A
last analyzed

Complexity

Total Complexity 21

Size/Duplication

Total Lines 150
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 29
dl 0
loc 150
rs 10
c 0
b 0
f 0
wmc 21

11 Methods

Rating   Name   Duplication   Size   Complexity  
A set() 0 8 2
A get() 0 5 2
A start() 0 5 2
A all() 0 3 3
A setMultiKey() 0 3 2
A destroy() 0 3 1
A isStart() 0 3 1
A clear() 0 6 2
A getNotEmpty() 0 5 2
A has() 0 5 1
A remove() 0 9 3
1
<?php
2
3
declare(strict_types=1);
4
5
namespace cse\helpers;
6
7
/**
8
 * Class Session
9
 *
10
 * @package cse\helpers
11
 */
12
class Session
13
{
14
    /**
15
     * @var null|string
16
     */
17
    protected static $multiKey = null;
18
19
    /**
20
     * Start session
21
     *
22
     * @param array $option
23
     *
24
     * @return bool
25
     */
26
    public static function start(array $option = []): bool
27
    {
28
        if (self::isStart()) return true;
29
30
        return session_start($option);
31
    }
32
33
    /**
34
     * Set session by key name
35
     *
36
     * @param string $name
37
     * @param $value
38
     */
39
    public static function set(string $name, $value): void
40
    {
41
        self::start();
42
43
        if (is_null(self::$multiKey)) {
44
            $_SESSION[$name] = $value;
45
        } else {
46
            $_SESSION[self::$multiKey][$name] = $value;
47
        }
48
    }
49
50
    /**
51
     * Has session key name
52
     *
53
     * @param string $name
54
     *
55
     * @return bool
56
     */
57
    public static function has(string $name): bool
58
    {
59
        self::start();
60
61
        return array_key_exists($name, self::all());
62
    }
63
64
    /**
65
     * Get session value by key name
66
     *
67
     * @param string $name
68
     * @param null $default
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $default is correct as it would always require null to be passed?
Loading history...
69
     *
70
     * @return null|mixed
71
     */
72
    public static function get(string $name, $default = null)
73
    {
74
        self::start();
75
76
        return self::has($name) ? self::all()[$name] : $default;
77
    }
78
79
    /**
80
     * Get session not empty value by key name
81
     *
82
     * @param string $name
83
     * @param null $default
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $default is correct as it would always require null to be passed?
Loading history...
84
     *
85
     * @return mixed|null
86
     */
87
    public static function getNotEmpty(string $name, $default = null)
88
    {
89
        $value = self::get($name);
90
91
        return empty($value) ? $default : $value;
92
    }
93
94
    /**
95
     * Remove session by key name
96
     *
97
     * @param string $name
98
     */
99
    public static function remove(string $name): void
100
    {
101
        self::start();
102
103
        if (self::has($name)) {
104
            if (is_null(self::$multiKey)) {
105
                unset($_SESSION[$name]);
106
            } else {
107
                unset($_SESSION[self::$multiKey][$name]);
108
            }
109
        }
110
    }
111
112
    /**
113
     * Get all session data
114
     *
115
     * @return array
116
     */
117
    public static function all(): array
118
    {
119
        return is_null(self::$multiKey) ? $_SESSION : (array_key_exists(self::$multiKey, $_SESSION) ? $_SESSION[self::$multiKey] : []);
120
    }
121
122
    /**
123
     * Set multi key
124
     *
125
     * @example $_SESSION[$multiKey][$key]
126
     *
127
     * @param null|string $multiKey
128
     */
129
    public static function setMultiKey(?string $multiKey = null): void
130
    {
131
        self::$multiKey = empty($multiKey) ? null : $multiKey;
132
    }
133
134
    /**
135
     * Clear session
136
     */
137
    public static function clear(): void
138
    {
139
        if (is_null(self::$multiKey)) {
140
            session_unset();
141
        } else {
142
            unset($_SESSION[self::$multiKey]);
143
        }
144
    }
145
146
    /**
147
     * Destroy session
148
     */
149
    public static function destroy(): void
150
    {
151
        session_destroy();
152
    }
153
154
    /**
155
     * Is start session
156
     *
157
     * @return bool
158
     */
159
    public static function isStart(): bool
160
    {
161
        return session_status() === PHP_SESSION_ACTIVE;
162
    }
163
}