]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/utils/external_cache/SugarCache_Base.php
Add .gitignore
[Github/sugarcrm.git] / include / utils / external_cache / SugarCache_Base.php
1 <?php
2 if(!defined('sugarEntry') || !sugarEntry) die('Not A Valid Entry Point');
3 /*********************************************************************************
4  * SugarCRM is a customer relationship management program developed by
5  * SugarCRM, Inc. Copyright (C) 2004-2011 SugarCRM Inc.
6  * 
7  * This program is free software; you can redistribute it and/or modify it under
8  * the terms of the GNU Affero General Public License version 3 as published by the
9  * Free Software Foundation with the addition of the following permission added
10  * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
11  * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
12  * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
13  * 
14  * This program is distributed in the hope that it will be useful, but WITHOUT
15  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16  * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
17  * details.
18  * 
19  * You should have received a copy of the GNU Affero General Public License along with
20  * this program; if not, see http://www.gnu.org/licenses or write to the Free
21  * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22  * 02110-1301 USA.
23  * 
24  * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
25  * SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
26  * 
27  * The interactive user interfaces in modified source and object code versions
28  * of this program must display Appropriate Legal Notices, as required under
29  * Section 5 of the GNU Affero General Public License version 3.
30  * 
31  * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
32  * these Appropriate Legal Notices must retain the display of the "Powered by
33  * SugarCRM" logo. If the display of the logo is not reasonably feasible for
34  * technical reasons, the Appropriate Legal Notices must display the words
35  * "Powered by SugarCRM".
36  ********************************************************************************/
37
38
39 /**
40  * The Base adapter only stores values in-memory.
41  *
42  * Cache adapters can extend this class in order to acheive local, in-memory
43  * caching to reduce the number of round trips to outside caching mechanisms
44  * during a single request.
45  *
46  */
47 class SugarCache_Base
48 {
49     /**
50      * The status of this object
51      *  - null if init() has not been called
52      *  - false if init() failed
53      *  - true if init() succeeded
54      *
55      * @var null|bool
56      * @access public
57      */
58     var $initialized = null;
59
60     /**
61      * Contains an in-memory cache of values in the cache
62      *
63      * @var array
64      * @access protected
65      */
66     var $_cache = array();
67
68     var $_my_class_name = '';
69
70     /**
71      * Handle any initialization.
72      *
73      * @internal As shown here, at a minimum init() is responsible for flagging
74      *           the {@link $initialized} property to true on success.
75      */
76     function init()
77     {
78         $this->initialized = true;
79         $this->_my_class_name = strtolower(get_class($this));
80     }
81
82     /**
83      * Set a given key/value pair within the cache
84      *
85      * @param string $key
86      * @param mixed $value
87      */
88     function set($key, $value)
89     {
90         if(EXTERNAL_CACHE_DEBUG) {
91             SugarCache::log("Step 1: Adding key to {$GLOBALS['external_cache_type']} cache $key with value ($value)");
92         }
93
94         if(empty($value)) {
95             $value = EXTERNAL_CACHE_NULL_VALUE;
96         }
97
98         if(EXTERNAL_CACHE_DEBUG) {
99             SugarCache::log("Step 2: Adding key to {$GLOBALS['external_cache_type']} cache $key with value ($value)");
100         }
101
102         $this->_cache[$key] = $value;
103     }
104
105     /**
106      * Retrieve the value of a given key
107      *
108      * @param string $key
109      * @return mixed
110      */
111     function get($key)
112     {
113         $GLOBALS['external_cache_request_local_total']++;
114         if (isset($this->_cache[$key])) {
115             if (EXTERNAL_CACHE_DEBUG) {
116                 SugarCache::log("BASE: found {$key}", 'lightpass');
117             }
118             $GLOBALS['external_cache_request_local_hits']++;
119             return $this->_cache[$key];
120         } else {
121             if (EXTERNAL_CACHE_DEBUG) {
122                 $type = $this->_my_class_name == 'sugarcache_base' ? 'fail' : 'lightfail';
123                 SugarCache::log("BASE: unable to locate {$key}", $type);
124             }
125         }
126     }
127
128     /**
129      * Unset a given value
130      *
131      * @internal The term "unset" is a reserved word within PHP.  This
132      *           opts for using the magic __unset() within PHP5 to enable
133      *           direct unset($cache->foo) calls.  Due to BC considerations
134      *           with PHP 4, however, this method should be invoked
135      *           directly via $cache->__unset('foo');
136      *
137      * @param string $key
138      */
139     function __unset($key)
140     {
141         unset($this->_cache[$key]);
142     }
143
144     /**
145      * Clean opcode cache
146      */
147     function clean_opcodes()
148     {
149         /* nothing by default */
150     }
151 }