Data Storage PHP
Простое хранилище данных в виде ключ-значение в JSON-файлах с разделяемой блокировкой на чтение и эксклюзивной блокировкой на запись.
Содержание
Требования
- PHP >= 7.0.
- Трейт
\App\Utils\JsonUtils
, содержащий методы для работы c данными в формате JSON. - Произвольный автозагрузчик классов, реализующий стандарт PSR-4.
Установка
Установка через composer:
$ composer require andrey-tech/data-storage-php
или добавить
"andrey-tech/data-storage-php"
в секцию require файла composer.json.
FileStorage
Класс Работа с хранилищами производится с помощью класса \App\DataStorage\FileStorage
.
При возникновении ошибок выбрасывается исключение с объектом класса \App\DataStorage\FileStorageException
.
Класс \App\DataStorage\FileStorage
имеет следующие публичные методы:
-
__construct(string $storageName = 'storage', string $storageDir = 'storage/')
Конструктор класса-хранилища.-
$storageName
- имя хранилища. Должно удовлетворять регулярному выражению'/^[\w\.-]+$/i
; -
$storageDir
- каталог, в котором будут располагаться JSON-файлы хранилища.
-
-
set(array $set) :void
Устанавливает в хранилище значения по ключам.-
$set
- ассоциативный массив ключей и значений:[ 'key1' => 'value1', 'key2' => 'value2',... ]
.
-
-
get(array|string $keys)
Возвращает из хранилища значение по ключу или значения по ключам.-
$keys
- ключ или массив ключей.
-
-
delete(array|string $keys) :void
Удаляет из хранилища пару(ы) ключ-значение по ключу(ам).-
$keys
- ключ или массив ключей.
-
-
load() :array
Загружает и возвращает все данные из хранилища в виде массива. -
update(array $set = [], array $delete = []) :void
Обновляет и/или удаляет значения по ключам в хранилище.-
$set
- ассоциативный массив ключей и значений:[ 'key1' => 'value1', 'key2' => 'value2',... ]
; -
$delete
- массив удаляемых ключей.
-
-
hasKey(string $key) :bool
Проверяет наличие пары ключ-значение в хранилище.-
$key
- имя ключа.
-
-
getStorageFileName() :string
Возвращает абсолютное имя JSON-файла хранилища.
Примеры
use \App\DataStorage\FileStorage;
use \App\DataStorage\FileStorageException;
use \App\AppException;
try {
$storage = new FileStorage('storage-1');
$storage->set([
'manager_id' => 2369305,
'numbers' => [ 4, 8, 15, 16, 23, 42 ],
'error_time' => null,
'user_ids' => [ 'alex' => 23, 'bob' => 2 ],
'months' => [ '0' => [ 1, 4 ], '1' => [ 1, 2, 5 ] ]
]);
$storage->set([ 'group_id' => 94824 ]);
var_dump($storage->hasKey('numbers'));
print_r($storage->get('numbers'));
print_r($storage->get([ 'manager_id', 'user_ids' ]));
$storage->delete('group_id');
$storage->update(
$set = [ 'error_time' => 1596124230 ],
$delete = [ 'manager_id' ]
);
print_r($storage->load());
} catch (FileStorageException $e) {
printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
} catch (AppException $e) {
printf('Ошибка (%d): %s' . PHP_EOL, $e->getCode(), $e->getMessage());
}
Автор
© 2020 andrey-tech
Лицензия
Данный код распространяется на условиях лицензии MIT.