From 3362d66663f2f8a5f621b260d11f3d23d65130da Mon Sep 17 00:00:00 2001 From: "Timothy J. Warren" Date: Fri, 19 Feb 2021 12:18:38 -0500 Subject: [PATCH] Fix a bunch of phpstan issues --- src/Driver/AbstractDriver.php | 5 +++-- src/Driver/ApcuDriver.php | 17 ++++++++++------- src/Driver/MemcachedDriver.php | 15 +++++++++++++-- src/Driver/RedisDriver.php | 7 ++++++- src/ItemCollection.php | 4 ++-- src/Pool.php | 7 ++++++- src/_Driver.php | 11 +++++------ 7 files changed, 45 insertions(+), 21 deletions(-) diff --git a/src/Driver/AbstractDriver.php b/src/Driver/AbstractDriver.php index 5bcc1ec..c26b21f 100644 --- a/src/Driver/AbstractDriver.php +++ b/src/Driver/AbstractDriver.php @@ -17,6 +17,7 @@ namespace Aviat\Banker\Driver; use Aviat\Banker\LoggerTrait; use Aviat\Banker\KeyValidateTrait; +use DateInterval; use Psr\Log\LoggerAwareInterface; /** @@ -66,10 +67,10 @@ abstract class AbstractDriver implements DriverInterface, LoggerAwareInterface { * Set multiple cache values * * @param array $items - * @param int|null $expires + * @param DateInterval|int|null $expires * @return bool */ - public function setMultiple(array $items, ?int $expires = NULL): bool + public function setMultiple(array $items, DateInterval|int|null $expires = NULL): bool { $this->validateKeys($items, TRUE); diff --git a/src/Driver/ApcuDriver.php b/src/Driver/ApcuDriver.php index e60151f..fc571d2 100644 --- a/src/Driver/ApcuDriver.php +++ b/src/Driver/ApcuDriver.php @@ -98,18 +98,16 @@ class ApcuDriver extends AbstractDriver { * Set multiple cache values * * @param array $items - * @param int|null $expires + * @param DateInterval|int|null $expires * @return bool */ - public function setMultiple(array $items, ?int $expires = NULL): bool + public function setMultiple(array $items, DateInterval|int|null $expires = NULL): bool { $this->validateKeys($items, TRUE); - $ttl = $this->getTTLFromExpiration((int)$expires); - $errorKeys = ($expires === NULL) ? apcu_store($items) - : apcu_store($items, NULL, $ttl); + : apcu_store($items, NULL, $this->getTTLFromExpiration($expires)); return empty($errorKeys); } @@ -173,11 +171,16 @@ class ApcuDriver extends AbstractDriver { /** * Convert expiration date argument into TTL argument * - * @param int|null $expires + * @param DateInterval|int|null $expires * @return int */ - protected function getTTLFromExpiration(?int $expires): int + protected function getTTLFromExpiration(DateInterval|int|null $expires): int { + if ($expires instanceof DateInterval) + { + return $expires->s; + } + $ttl = (int)$expires - time(); return ($ttl < 0) ? 0 : $ttl; diff --git a/src/Driver/MemcachedDriver.php b/src/Driver/MemcachedDriver.php index 3dd01f8..333221f 100644 --- a/src/Driver/MemcachedDriver.php +++ b/src/Driver/MemcachedDriver.php @@ -130,6 +130,11 @@ class MemcachedDriver extends AbstractDriver { { $this->validateKey($key); + if ($expires instanceof DateInterval) + { + $expires = time() + $expires->s; + } + return ($expires === NULL) ? $this->conn->set($key, $value) : $this->conn->set($key, $value, $expires); @@ -139,13 +144,18 @@ class MemcachedDriver extends AbstractDriver { * Set multiple cache values * * @param array $items - * @param int|null $expires + * @param DateInterval|int|null $expires * @return bool */ - public function setMultiple(array $items, ?int $expires = NULL): bool + public function setMultiple(array $items, DateInterval|int|null $expires = NULL): bool { $this->validateKeys($items, TRUE); + if ($expires instanceof DateInterval) + { + $expires = $expires->s; + } + return ($expires === NULL) ? $this->conn->setMulti($items) : $this->conn->setMulti($items, $expires); @@ -174,6 +184,7 @@ class MemcachedDriver extends AbstractDriver { $deleted = $this->conn->deleteMulti($keys); + // @phpstan-ignore-next-line if (is_array($deleted)) { foreach ($deleted as $key => $status) diff --git a/src/Driver/RedisDriver.php b/src/Driver/RedisDriver.php index bc318fb..5970327 100644 --- a/src/Driver/RedisDriver.php +++ b/src/Driver/RedisDriver.php @@ -79,6 +79,11 @@ class RedisDriver extends AbstractDriver { public function get(string $key): mixed { $raw = $this->conn->get($key); + if ($raw === NULL) + { + return null; + } + return unserialize($raw); } @@ -87,7 +92,7 @@ class RedisDriver extends AbstractDriver { * * @param string $key * @param mixed $value - * @param int|null $expires + * @param DateInterval|int|null $expires * @return bool */ public function set(string $key, mixed $value, DateInterval|int|null $expires = NULL): bool diff --git a/src/ItemCollection.php b/src/ItemCollection.php index f07f1b4..0e48f1a 100644 --- a/src/ItemCollection.php +++ b/src/ItemCollection.php @@ -51,9 +51,9 @@ class ItemCollection extends ArrayIterator implements JsonSerializable { /** * Specify what data to serialize when using `json_encode` * - * @return mixed - The full set of data to be serialized + * @return array - The full set of data to be serialized */ - public function jsonSerialize() + public function jsonSerialize(): array { return $this->items; } diff --git a/src/Pool.php b/src/Pool.php index 9fb5ce1..e20cd40 100644 --- a/src/Pool.php +++ b/src/Pool.php @@ -214,7 +214,12 @@ final class Pool implements CacheItemPoolInterface, LoggerAwareInterface { */ public function save(CacheItemInterface $item): bool { - return $item->save(); + if (method_exists($item, 'save')) + { + return $item->save(); + } + + return FALSE; } /** diff --git a/src/_Driver.php b/src/_Driver.php index 81abc7c..eeaab4f 100644 --- a/src/_Driver.php +++ b/src/_Driver.php @@ -15,8 +15,7 @@ */ namespace Aviat\Banker; -use Aviat\Banker\Driver\DriverInterface; -use Aviat\Banker\Exception\InvalidArgumentException; +use Aviat\Banker\Driver\AbstractDriver; /** * Private trait for shared driver-related functionality @@ -27,17 +26,17 @@ trait _Driver { /** * Driver class for handling the chosen caching backend * - * @var DriverInterface + * @var AbstractDriver */ - private DriverInterface $driver; + private AbstractDriver $driver; /** * Instantiate the appropriate cache backend based on the config * * @param array $driverConfig - * @return DriverInterface + * @return AbstractDriver */ - protected function loadDriver(array $driverConfig = []): DriverInterface + protected function loadDriver(array $driverConfig = []): AbstractDriver { $driver = ucfirst(strtolower($driverConfig['driver'] ?? 'null')); $class = __NAMESPACE__ . "\\Driver\\${driver}Driver";