-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConfig.php
More file actions
97 lines (78 loc) · 2.46 KB
/
Copy pathConfig.php
File metadata and controls
97 lines (78 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
declare(strict_types=1);
namespace Infocyph\ArrayKit\Config;
use Infocyph\ArrayKit\Concerns\HookTrait;
use Infocyph\ArrayKit\Config\Concerns\BaseConfigTrait;
/**
* Class Config
*
* Provides base configuration storage with optional hook-aware variants.
*
* Core methods from BaseConfigTrait (`get`, `set`, `fill`) remain fast and
* hook-free. Hook processing is explicit through `getWithHooks`,
* `setWithHooks`, and `fillWithHooks`.
*/
class Config
{
use BaseConfigTrait;
use HookTrait;
/**
* Hook-aware variant of fill().
*
* @param string|array<array-key, mixed> $key
*/
public function fillWithHooks(string|array $key, mixed $value = null): bool
{
if (is_array($key)) {
$processed = [];
foreach ($key as $path => $entry) {
$processed[$path] = $this->processValue($path, $entry, 'set');
}
return $this->fill($processed);
}
$processed = $this->processValue($key, $value, 'set');
return $this->fill($key, $processed);
}
/**
* Hook-aware variant of get().
*
* @param int|string|array<int, string|int>|null $key
*/
public function getWithHooks(int|string|array|null $key = null, mixed $default = null): mixed
{
$value = $this->get($key, $default);
if (is_array($key)) {
if (!is_array($value)) {
return $value;
}
foreach ($value as $path => $entry) {
$value[$path] = $this->processValue($path, $entry, 'get');
}
return $value;
}
if ($key === null) {
return $value;
}
return $this->processValue($key, $value, 'get');
}
/**
* Hook-aware variant of set().
*
* @param string|array<array-key, mixed>|null $key
*/
public function setWithHooks(string|array|null $key = null, mixed $value = null, bool $overwrite = true): bool
{
if (is_array($key)) {
$processed = [];
foreach ($key as $path => $entry) {
$processed[$path] = $this->processValue($path, $entry, 'set');
}
return $this->set($processed, null, $overwrite);
}
if ($key === null) {
return $this->set($key, $value, $overwrite);
}
$processedValue = $this->processValue($key, $value, 'set');
return $this->set($key, $processedValue, $overwrite);
}
}