qphpstorage / qphpstorage
A simple wrapper around swoole4 table storage, with casting.
v1.0.2
2022-06-17 13:43 UTC
Requires
- php: ^8.0.2
Requires (Dev)
- phpunit/phpunit: ^9.5
README
A simple storage library uses swoole table.
This library is built to work with queue php swoole server. but it is available as component to use it whenever you want.
Requirements
- PHP > 8.0.2
- swoole > 4.8
Install
composer require qphpstorage/qphpstorage
Example
<?php require "vendor/autoload.php"; use QPStorage\Base\Storage; use QPStorage\Casts\JsonCast; class UserStorage extends Storage { // Required public string $name = "users"; // Required public int $size = 1024; // Required public array $definitions = [ "id" => [Swoole\Table::TYPE_INT], "name" => [Swoole\Table::TYPE_STRING, 64], "options" => [Swoole\Table::TYPE_STRING, 64] ]; // Optional , if you do not need it , remove the property public array $casts = [ // You are free to use your own casters , but you should implement QPStorage\Casts\CastInterface "options" => JsonCast::class ]; }
Get the results
<?php $users = new UserStorage; $users->put("foo", ["id" => 1, "name" => "foo", "options" => ["age" => 22]]); $users->put("bar", ["id" => 2, "name" => "bar", "options" => ["age" => 24]]); echo $users->get("foo")->options["age"]; // Loop over users echo "Count : ".$users->count()."\n"; $users->rewind(); while($users->valid()) { $user = $users->current(); echo $user->name."\n"; $users->next(); }
Custom casts
<?php namespace QPStorage\Casts; class JsonCast implements CastInterface { public function set($data) { $data = json_encode($data); return (JSON_ERROR_NONE !== json_last_error()) ? "" : $data; } public function get($data) { $data = json_decode($data, true); return (JSON_ERROR_NONE !== json_last_error()) ? [] : $data; } }