Stores
Stores are objects that implement READ/UPDATE/DELETE operations against a storage medium for objects that implement the StorableInterface interface. In a nutshell, an object is storable if it has an ID (see the StorableTrait and AbstractStorable for a simple implementation). All classes belonging to the Storage namespace can be found here.
There are 3 stores that the Foundations Module comes with:
A memory store for storing objects in-memory during the current request.
An options table store for persistent database storage across requests in the WP options table.
A user meta table store for persistent database storage across request in the WP user meta table.
Here is a simple example of a dummy storable object stored in a memory store:
<?php
namespace DeepWebSolutions\Plugins\MyTestPlugin\Storage;
use DeepWebSolutions\Framework\Foundations\Utilities\Storage\AbstractStorable;
use DeepWebSolutions\Framework\Foundations\Utilities\Storage\Stores\MemoryStore;
class MyStorable extends AbstractStorable {
public string $storable_property;
}
$my_storable1 = new MyStorable( 'unique-id-1' );
$my_storable1->storable_property = 'test value 1';
$my_storable2 = new MyStorable( 'unique-id-2' );
$my_storable1->storable_property = 'test value 2';
$memory_store = new MemoryStore( 'my-memory-store' );
$memory_store->add( $my_storable1 );
$memory_store->add( $my_storable2 );
echo $memory_store->count(); // echoes 2
echo $memory_store->get( 'unique-id-1' )->storable_property; // echoes 'test value 1'
$my_storable3 = new MyStorable( 'unique-id-1' ); // same as $my_storable1
$my_storable3->storable_property = 'test value 3';
$memory_store->update( $my_storable3 );
echo $memory_store->get( 'unique-id-1' )->storable_property; // echoes 'test value 3'
There is no guarantee that your storable object will be stored properly when using the options or user meta stores. The two stores rely on WordPress' own update_option
and update_user_meta
functions respectively and those both rely on PHP's serialize
function. If you have trouble storing your objects, implement the magic methods __serialize
and __unserialize
for better handling.
Last updated
Was this helpful?