From b7186938420e82c965768b4064289f6d9b4fce3c Mon Sep 17 00:00:00 2001 From: Morris Jobke Date: Thu, 1 Sep 2016 12:30:05 +0200 Subject: [PATCH] Activate APCu on PHP 7 Fix an issue with APCus inc and dec methods on PHP 7 see https://github.com/krakjoe/apcu/issues/183#issuecomment-244038221 for details Signed-off-by: Morris Jobke --- lib/private/Memcache/APCu.php | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/lib/private/Memcache/APCu.php b/lib/private/Memcache/APCu.php index 713ed152648..70f0d73d2d4 100644 --- a/lib/private/Memcache/APCu.php +++ b/lib/private/Memcache/APCu.php @@ -88,7 +88,21 @@ class APCu extends Cache implements IMemcache { */ public function inc($key, $step = 1) { $this->add($key, 0); - return apcu_inc($this->getPrefix() . $key, $step); + /** + * TODO - hack around a PHP 7 specific issue in APCu + * + * on PHP 7 the apcu_inc method on a non-existing object will increment + * "0" and result in "1" as value - therefore we check for existence + * first + * + * on PHP 5.6 this is not the case + * + * see https://github.com/krakjoe/apcu/issues/183#issuecomment-244038221 + * for details + */ + return apcu_exists($this->getPrefix() . $key) + ? apcu_inc($this->getPrefix() . $key, $step) + : false; } /** @@ -99,7 +113,21 @@ class APCu extends Cache implements IMemcache { * @return int | bool */ public function dec($key, $step = 1) { - return apcu_dec($this->getPrefix() . $key, $step); + /** + * TODO - hack around a PHP 7 specific issue in APCu + * + * on PHP 7 the apcu_dec method on a non-existing object will decrement + * "0" and result in "-1" as value - therefore we check for existence + * first + * + * on PHP 5.6 this is not the case + * + * see https://github.com/krakjoe/apcu/issues/183#issuecomment-244038221 + * for details + */ + return apcu_exists($this->getPrefix() . $key) + ? apcu_dec($this->getPrefix() . $key, $step) + : false; } /** -- 2.39.5