WordPress.org

Make WordPress Core

Ticket #20004: 20004.1.diff

File 20004.1.diff, 5.4 KB (added by andy, 6 years ago)
  • wp-includes/cache.php

     
    9494}
    9595
    9696/**
     97 * Retrieves the result of the most recent wp_cache_get: found or not found.
     98 * This allows testing whether a FALSE from wp_cache_get is the stored value
     99 * or the result of a cache miss.
     100 * @return bool
     101 */
     102function wp_cache_found() {
     103        global $wp_object_cache;
     104
     105        return $wp_object_cache->found();
     106}
     107
     108/**
    97109 * Retrieves the cache contents from the cache by key and group.
    98110 *
    99111 * @since 2.0.0
     
    103115 * @param int|string $key What the contents in the cache are called
    104116 * @param string $group Where the cache contents are grouped
    105117 * @param bool $force Whether to force an update of the local cache from the persistent cache (default is false)
     118 * @param &bool $found Whether key was found in the cache. Disambiguates a return of false, a storable value.
    106119 * @return bool|mixed False on failure to retrieve contents or the cache
    107120 *              contents on success
    108121 */
    109 function wp_cache_get( $key, $group = '', $force = false ) {
     122function wp_cache_get( $key, $group = '', $force = false, &$found = null ) {
    110123        global $wp_object_cache;
    111124
    112         return $wp_object_cache->get( $key, $group, $force );
     125        return $wp_object_cache->get( $key, $group, $force, $found );
    113126}
    114127
    115128/**
     
    270283        var $global_groups = array();
    271284
    272285        /**
     286         * The result of the last get: found or not found.
     287         * @var bool
     288         */
     289        var $last_result;
     290
     291        /**
    273292         * Adds data to the cache if it doesn't already exist.
    274293         *
    275          * @uses WP_Object_Cache::get Checks to see if the cache already has data.
     294         * @uses WP_Object_Cache::_exists Checks to see if the cache already has data.
    276295         * @uses WP_Object_Cache::set Sets the data after the checking the cache
    277296         *              contents existence.
    278297         *
     
    288307                if ( wp_suspend_cache_addition() )
    289308                        return false;
    290309
    291                 if ( empty ($group) )
     310                if ( empty( $group ) )
    292311                        $group = 'default';
    293312
    294                 if (false !== $this->get($key, $group))
     313                if ( $this->_exists($key, $group) )
    295314                        return false;
    296315
    297316                return $this->set($key, $data, $group, $expire);
     
    322341         * @return false|int False on failure, the item's new value on success.
    323342         */
    324343        function decr( $key, $offset = 1, $group = 'default' ) {
    325                 if ( ! isset( $this->cache[ $group ][ $key ] ) )
     344                if ( ! $this->_exists( $key, $group ) )
    326345                        return false;
    327346
    328347                if ( ! is_numeric( $this->cache[ $group ][ $key ] ) )
     
    354373         * @return bool False if the contents weren't deleted and true on success
    355374         */
    356375        function delete($key, $group = 'default', $force = false) {
    357                 if (empty ($group))
     376                if ( empty( $group ) )
    358377                        $group = 'default';
    359378
    360                 if (!$force && false === $this->get($key, $group))
     379                if ( ! $force && ! $this->_exists( $key, $group ) )
    361380                        return false;
    362381
    363                 unset ($this->cache[$group][$key]);
     382                unset( $this->cache[$group][$key] );
    364383                return true;
    365384        }
    366385
     
    378397        }
    379398
    380399        /**
     400         * Accesses the result of the last get: found or not found.
     401         * @return bool
     402         */
     403        function found() {
     404                return $this->last_result;
     405        }
     406
     407        /**
    381408         * Retrieves the cache contents, if it exists
    382409         *
    383410         * The contents will be first attempted to be retrieved by searching by the
     
    394421         * @return bool|mixed False on failure to retrieve contents or the cache
    395422         *              contents on success
    396423         */
    397         function get( $key, $group = 'default', $force = false) {
    398                 if ( empty ($group) )
     424        function get( $key, $group = 'default', $force = false, &$found = null ) {
     425                if ( empty( $group ) )
    399426                        $group = 'default';
    400427
    401                 if ( isset ($this->cache[$group][$key]) ) {
     428                if ( $this->_exists( $key, $group ) ) {
     429                        $found = $this->last_result = true;
    402430                        $this->cache_hits += 1;
    403431                        if ( is_object($this->cache[$group][$key]) )
    404432                                return clone $this->cache[$group][$key];
     
    406434                                return $this->cache[$group][$key];
    407435                }
    408436
     437                $found = $this->last_result = false;
    409438                $this->cache_misses += 1;
    410439                return false;
    411440        }
     
    421450         * @return false|int False on failure, the item's new value on success.
    422451         */
    423452        function incr( $key, $offset = 1, $group = 'default' ) {
    424                 if ( ! isset( $this->cache[ $group ][ $key ] ) )
     453                if ( empty( $group ) )
     454                        $group = 'default';
     455
     456                if ( ! $this->_exists( $key, $group ) )
    425457                        return false;
    426458
    427459                if ( ! is_numeric( $this->cache[ $group ][ $key ] ) )
     
    450482         * @return bool False if not exists, true if contents were replaced
    451483         */
    452484        function replace($key, $data, $group = 'default', $expire = '') {
    453                 if (empty ($group))
     485                if ( empty( $group ) )
    454486                        $group = 'default';
    455487
    456                 if ( false === $this->get($key, $group) )
     488                if ( ! $this->_exists( $key, $group ) )
    457489                        return false;
    458490
    459491                return $this->set($key, $data, $group, $expire);
     
    493525         * @return bool Always returns true
    494526         */
    495527        function set($key, $data, $group = 'default', $expire = '') {
    496                 if ( empty ($group) )
     528                if ( empty( $group ) )
    497529                        $group = 'default';
    498530
    499                 if ( null === $data )
    500                         $data = '';
    501 
    502531                if ( is_object($data) )
    503532                        $data = clone $data;
    504533
     
    527556        }
    528557
    529558        /**
     559         * Utility function to determine whether a key exists in the cache.
     560         * @access private
     561         */
     562        function _exists($key, $group) {
     563                return is_array( $this->cache[$group] ) && array_key_exists( $key, $this->cache[$group] );
     564        }
     565
     566
     567        /**
    530568         * Sets up object properties; PHP 5 style constructor
    531569         *
    532570         * @since 2.0.8