andrey-tech/data-storage-php

简单的键值存储,以JSON文件形式存储,支持读锁和写锁

1.1.0 2020-08-03 08:45 UTC

This package is auto-updated.

Last update: 2024-08-29 05:31:04 UTC


README

简单的键值存储,以JSON文件形式存储,支持读锁和写锁。

内容

要求

  • PHP >= 7.0.
  • 特性 \App\Utils\JsonUtils,包含处理JSON数据的方法。
  • 任意自动加载器,实现PSR-4标准。

安装

通过composer安装

$ composer require andrey-tech/data-storage-php

或添加以下内容到composer.json文件的require部分:

"andrey-tech/data-storage-php"

在文件composer.json的require部分添加以下内容:

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许可证分发。