WordPress.org

Make WordPress Core

Ticket #20004: 20004.1.diff

File 20004.1.diff, 5.4 KB (added by andy, 2 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