clear(); } /** * Grabs value from APC(u) by key. * * Example: * * ``` php * grabValueFromApc('users_count'); * ?> * ``` * * @param string|string[] $key * @return mixed */ public function grabValueFromApc($key) { $value = $this->fetch($key); $this->debugSection('Value', $value); return $value; } /** * Checks item in APC(u) exists and the same as expected. * * Examples: * * ``` php * seeInApc('users_count'); * * // Checks a 'users_count' exists and has the value 200 * $I->seeInApc('users_count', 200); * ?> * ``` * * @param string|string[] $key * @param mixed $value */ public function seeInApc($key, $value = null) { if (null === $value) { $this->assertTrue($this->exists($key), "Cannot find key '$key' in APC(u)."); return; } $actual = $this->grabValueFromApc($key); $this->assertEquals($value, $actual, "Cannot find key '$key' in APC(u) with the provided value."); } /** * Checks item in APC(u) doesn't exist or is the same as expected. * * Examples: * * ``` php * dontSeeInApc('users_count'); * * // Checks a 'users_count' exists does not exist or its value is not the one provided * $I->dontSeeInApc('users_count', 200); * ?> * ``` * * @param string|string[] $key * @param mixed $value */ public function dontSeeInApc($key, $value = null) { if (null === $value) { $this->assertFalse($this->exists($key), "The key '$key' exists in APC(u)."); return; } $actual = $this->grabValueFromApc($key); if (false !== $actual) { $this->assertEquals($value, $actual, "The key '$key' exists in APC(u) with the provided value."); } } /** * Stores an item `$value` with `$key` on the APC(u). * * Examples: * * ```php * haveInApc('users', ['name' => 'miles', 'email' => 'miles@davis.com']); * * // Object * $I->haveInApc('user', UserRepository::findFirst()); * * // Key as array of 'key => value' * $entries = []; * $entries['key1'] = 'value1'; * $entries['key2'] = 'value2'; * $entries['key3'] = ['value3a','value3b']; * $entries['key4'] = 4; * $I->haveInApc($entries, null); * ?> * ``` * * @param string|array $key * @param mixed $value * @param int $expiration * @return mixed */ public function haveInApc($key, $value, $expiration = null) { $this->store($key, $value, $expiration); return $key; } /** * Clears the APC(u) cache */ public function flushApc() { // Returns TRUE always $this->clear(); } /** * Clears the APC(u) cache. * * @return bool */ protected function clear() { if (function_exists('apcu_clear_cache')) { return apcu_clear_cache(); } return apc_clear_cache('user'); } /** * Checks if entry exists * * @param string|string[] $key * * @return bool|\string[] */ protected function exists($key) { if (function_exists('apcu_exists')) { return apcu_exists($key); } return apc_exists($key); } /** * Fetch a stored variable from the cache * * @param string|string[] $key * * @return mixed */ protected function fetch($key) { $success = false; if (function_exists('apcu_fetch')) { $data = apcu_fetch($key, $success); } else { $data = apc_fetch($key, $success); } $this->debugSection('Fetching a stored variable', $success ? 'OK' : 'FAILED'); return $data; } /** * Cache a variable in the data store. * * @param string|array $key * @param mixed $var * @param int $ttl * * @return array|bool */ protected function store($key, $var, $ttl = 0) { if (function_exists('apcu_store')) { return apcu_store($key, $var, $ttl); } return apc_store($key, $var, $ttl); } }