00001 <?php
00002 require_once dirname(__FILE__) . '/dataobjectbase.cls.php';
00003
00004
00005
00006
00007
00008
00009
00010 class DataObjectCached extends DataObjectBase {
00011
00012
00013
00014
00015
00016
00017
00018 protected function get_from_cache($key, $callback, $params = false) {
00019 $ret = $this->get_cache_item($key);
00020 if (is_null($ret)) {
00021 $ret = $this->$callback($params);
00022 $this->set_cache_item($key, $ret);
00023 }
00024 return $ret;
00025 }
00026
00027
00028
00029
00030 protected function clear_cache() {
00031 RuntimeCache::remove($this->compute_cache_item_key(''));
00032 }
00033
00034
00035
00036
00037
00038
00039 protected function clear_cache_item($key) {
00040 RuntimeCache::remove($this->compute_cache_item_key($key));
00041 }
00042
00043
00044
00045
00046
00047
00048
00049 protected function get_cache_item($key) {
00050 return RuntimeCache::get($this->compute_cache_item_key($key), null);
00051 }
00052
00053
00054
00055
00056
00057
00058
00059 protected function set_cache_item($key, $value) {
00060 RuntimeCache::set($this->compute_cache_item_key($key), $value);
00061 }
00062
00063
00064
00065
00066
00067
00068
00069 protected function compute_cache_item_key($key) {
00070 $ret = $this->to_string();
00071 if ($ret) {
00072 if ($key) {
00073 $pos = strpos($key, '[');
00074 if ($pos === 0) {
00075 $ret .= $key;
00076 }
00077 else if ($pos === false) {
00078 $ret .= '[' . $key . ']';
00079 }
00080 else {
00081 $ret .= '[' . substr($key, 0, $pos) . ']' . substr($key, $pos);
00082 }
00083 }
00084 }
00085 else {
00086 $ret = $key;
00087 }
00088 return $ret;
00089 }
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108 public function fetch() {
00109 $this->clear_cache();
00110 return parent::fetch();
00111 }
00112 }