- WIP on Object serialization
This commit is contained in:
		
							parent
							
								
									43c0627319
								
							
						
					
					
						commit
						28a4065a69
					
				@ -2,10 +2,13 @@
 | 
			
		||||
 | 
			
		||||
namespace Kash;
 | 
			
		||||
 | 
			
		||||
use Kash\Serialize\ObjectSerialize;
 | 
			
		||||
use Laravel\SerializableClosure\Contracts\Serializable;
 | 
			
		||||
use Psr\SimpleCache\CacheException;
 | 
			
		||||
use Psr\SimpleCache\CacheInterface;
 | 
			
		||||
use Psr\SimpleCache\InvalidArgumentException;
 | 
			
		||||
 | 
			
		||||
use Ulmus\EntityCollection;
 | 
			
		||||
use function apcu_fetch, apcu_store, apcu_delete, apcu_clear_cache, apcu_exists, apcu_enabled;
 | 
			
		||||
 | 
			
		||||
class ApcuCache implements CacheInterface
 | 
			
		||||
@ -25,18 +28,25 @@ class ApcuCache implements CacheInterface
 | 
			
		||||
                }
 | 
			
		||||
            };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function get(string $key, mixed $default = null) : mixed
 | 
			
		||||
    {
 | 
			
		||||
        $value = apcu_fetch($this->fullKey($key), $status);
 | 
			
		||||
 | 
			
		||||
        if ($value instanceof Serialize\ObjectSerialize) {
 | 
			
		||||
            $value = $value->restore();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $status === true ? $value : $default;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function set(string $key, mixed $value, null|int|\DateInterval $ttl = null) : bool
 | 
			
		||||
    {
 | 
			
		||||
        /*if ( is_object($value) && ! ( $value instanceof Serialize\ObjectSerialize )) {
 | 
			
		||||
            $value = $this->serializeObject($value);
 | 
			
		||||
        }*/
 | 
			
		||||
 | 
			
		||||
        return apcu_store($this->fullKey($key), $value, $this->handleTTL($ttl));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -102,4 +112,10 @@ class ApcuCache implements CacheInterface
 | 
			
		||||
    {
 | 
			
		||||
        return $this->invalidator . $this->namespace . static::DEFAULT_NS_SEPARATOR . $key;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected function serializeObject(object $input)
 | 
			
		||||
    {
 | 
			
		||||
        $objSerialize = new ObjectSerialize();
 | 
			
		||||
        return $objSerialize->transform($input);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ class ArrayCache implements CacheInterface
 | 
			
		||||
    protected array $storageTTL = [];
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        protected CacheInvalidator $invalidator,
 | 
			
		||||
        protected null|CacheInvalidator $invalidator,
 | 
			
		||||
        protected string $namespace,
 | 
			
		||||
        protected int $ttl = -1,
 | 
			
		||||
    ) { }
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										42
									
								
								src/Serialize/ObjectSerialize.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/Serialize/ObjectSerialize.php
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,42 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace Kash\Serialize;
 | 
			
		||||
 | 
			
		||||
class ObjectSerialize
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    public function __construct(
 | 
			
		||||
        public string|null $objectType = null,
 | 
			
		||||
        public string|null $objectData = null,
 | 
			
		||||
    ) { }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public function transform(object $object) : self
 | 
			
		||||
    {
 | 
			
		||||
        $this->objectType = $object::class;
 | 
			
		||||
 | 
			
		||||
        if ($object instanceof \Serializable) {
 | 
			
		||||
            $this->objectData = $object->serialize();
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            $this->objectData = serialize($object);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function restore() : object
 | 
			
		||||
    {
 | 
			
		||||
        $cls = $this->objectType;
 | 
			
		||||
        $obj = new $cls();
 | 
			
		||||
 | 
			
		||||
        if ($object instanceof \Serializable) {
 | 
			
		||||
            $obj->unserialize($this->objectData);
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            # unserialize()
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return $obj;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user