[ Index ] |
PHP Cross Reference of MediaWiki-1.24.0 |
[Summary view] [Print] [Text view]
1 <?php 2 /** 3 * Functions to get cache objects. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License along 16 * with this program; if not, write to the Free Software Foundation, Inc., 17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 * http://www.gnu.org/copyleft/gpl.html 19 * 20 * @file 21 * @ingroup Cache 22 */ 23 24 /** 25 * Functions to get cache objects 26 * 27 * @ingroup Cache 28 */ 29 class ObjectCache { 30 public static $instances = array(); 31 32 /** 33 * Get a cached instance of the specified type of cache object. 34 * 35 * @param string $id 36 * 37 * @return BagOStuff 38 */ 39 static function getInstance( $id ) { 40 if ( isset( self::$instances[$id] ) ) { 41 return self::$instances[$id]; 42 } 43 44 $object = self::newFromId( $id ); 45 self::$instances[$id] = $object; 46 return $object; 47 } 48 49 /** 50 * Clear all the cached instances. 51 */ 52 static function clear() { 53 self::$instances = array(); 54 } 55 56 /** 57 * Create a new cache object of the specified type. 58 * 59 * @param string $id 60 * 61 * @throws MWException 62 * @return BagOStuff 63 */ 64 static function newFromId( $id ) { 65 global $wgObjectCaches; 66 67 if ( !isset( $wgObjectCaches[$id] ) ) { 68 throw new MWException( "Invalid object cache type \"$id\" requested. " . 69 "It is not present in \$wgObjectCaches." ); 70 } 71 72 return self::newFromParams( $wgObjectCaches[$id] ); 73 } 74 75 /** 76 * Create a new cache object from parameters 77 * 78 * @param array $params 79 * 80 * @throws MWException 81 * @return BagOStuff 82 */ 83 static function newFromParams( $params ) { 84 if ( isset( $params['factory'] ) ) { 85 return call_user_func( $params['factory'], $params ); 86 } elseif ( isset( $params['class'] ) ) { 87 $class = $params['class']; 88 return new $class( $params ); 89 } else { 90 throw new MWException( "The definition of cache type \"" 91 . print_r( $params, true ) . "\" lacks both " 92 . "factory and class parameters." ); 93 } 94 } 95 96 /** 97 * Factory function referenced from DefaultSettings.php for CACHE_ANYTHING 98 * 99 * CACHE_ANYTHING means that stuff has to be cached, not caching is not an option. 100 * If a caching method is configured for any of the main caches ($wgMainCacheType, 101 * $wgMessageCacheType, $wgParserCacheType), then CACHE_ANYTHING will effectively 102 * be an alias to the configured cache choice for that. 103 * If no cache choice is configured (by default $wgMainCacheType is CACHE_NONE), 104 * then CACHE_ANYTHING will forward to CACHE_DB. 105 * @param array $params 106 * @return BagOStuff 107 */ 108 static function newAnything( $params ) { 109 global $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType; 110 $candidates = array( $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType ); 111 foreach ( $candidates as $candidate ) { 112 if ( $candidate !== CACHE_NONE && $candidate !== CACHE_ANYTHING ) { 113 return self::getInstance( $candidate ); 114 } 115 } 116 return self::getInstance( CACHE_DB ); 117 } 118 119 /** 120 * Factory function referenced from DefaultSettings.php for CACHE_ACCEL. 121 * 122 * This will look for any APC style server-local cache. 123 * A fallback cache can be specified if none is found. 124 * 125 * @param array $params 126 * @param int|string $fallback Fallback cache, e.g. (CACHE_NONE, "hash") (since 1.24) 127 * @throws MWException 128 * @return BagOStuff 129 */ 130 static function newAccelerator( $params, $fallback = null ) { 131 if ( function_exists( 'apc_fetch' ) ) { 132 $id = 'apc'; 133 } elseif ( function_exists( 'xcache_get' ) && wfIniGetBool( 'xcache.var_size' ) ) { 134 $id = 'xcache'; 135 } elseif ( function_exists( 'wincache_ucache_get' ) ) { 136 $id = 'wincache'; 137 } else { 138 if ( $fallback ) { 139 return self::newFromId( $fallback ); 140 } 141 throw new MWException( "CACHE_ACCEL requested but no suitable object " . 142 "cache is present. You may want to install APC." ); 143 } 144 return self::newFromId( $id ); 145 } 146 147 /** 148 * Factory function that creates a memcached client object. 149 * 150 * This always uses the PHP client, since the PECL client has a different 151 * hashing scheme and a different interpretation of the flags bitfield, so 152 * switching between the two clients randomly would be disastrous. 153 * 154 * @param array $params 155 * 156 * @return MemcachedPhpBagOStuff 157 */ 158 static function newMemcached( $params ) { 159 return new MemcachedPhpBagOStuff( $params ); 160 } 161 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Fri Nov 28 14:03:12 2014 | Cross-referenced by PHPXref 0.7.1 |