/**
  *    Get cache data
  *
  * @param Charcoal_String $key                   string name to identify cached data
  * @param Charcoal_String $type_name_checked     checks type(class/interface) if not NULL
  */
 public function getCache($key, Charcoal_String $type_name_checked = NULL)
 {
     //        Charcoal_ParamTrait::validateString( 1, $key );
     //        Charcoal_ParamTrait::validateString( 2, $type_name_checked, TRUE );
     try {
         $type_name_checked = us($type_name_checked);
         $cached_data = Charcoal_Cache::get($key);
         $type_check = $cached_data instanceof Charcoal_Object;
         if (!$type_check) {
             $actual_type = get_class($cached_data);
             log_warning("system, debug, cache", "cache", "cache type mismatch: expected=[Charcoal_Object] actual=[{$actual_type}]");
             return FALSE;
         }
         if ($cached_data !== FALSE && $type_name_checked !== NULL) {
             $type_check = $cached_data instanceof $type_name_checked;
             if (!$type_check) {
                 $actual_type = get_class($cached_data);
                 log_warning("system, debug, cache", "cache", "cache type mismatch: expected=[{$type_name_checked}] actual=[{$actual_type}]");
                 return FALSE;
             }
         }
         return $cached_data;
     } catch (Exception $ex) {
         _catch($ex);
         _throw(new Charcoal_EventContextException(__METHOD__ . '() failed.', $ex));
     }
 }
 /**
  * ใƒ†ใ‚นใƒˆ
  */
 public function test($action, $context)
 {
     $action = us($action);
     $cache_driver = Charcoal_Factory::createObject(s('memcache'), s('cache_driver'), s('Charcoal_ICacheDriver'));
     Charcoal_Cache::register(s('memcache'), $cache_driver);
     switch ($action) {
         case "get_empty_data":
             Charcoal_Cache::delete(s('foo'));
             $value = Charcoal_Cache::get(s('foo'));
             $this->assertEquals(FALSE, $value);
             return TRUE;
         case "get_integer_data":
             Charcoal_Cache::set(s('foo'), i(100));
             $value = Charcoal_Cache::get(s('foo'));
             $this->assertEquals(i(100), $value);
             return TRUE;
         case "get_string_data":
             Charcoal_Cache::set(s('foo'), s('bar'));
             $value = Charcoal_Cache::get(s('foo'));
             $this->assertEquals(s('bar'), $value);
             return TRUE;
         case "get_array_data":
             $data = array('foo' => 100, 'bar' => 'baz');
             Charcoal_Cache::set(s('foo'), v($data));
             $value = Charcoal_Cache::get(s('foo'));
             $this->assertEquals(v($data), $value);
             return TRUE;
         case "get_boolean_data":
             Charcoal_Cache::set(s('foo'), b(TRUE));
             $value = Charcoal_Cache::get(s('foo'));
             $this->assertEquals(b(TRUE), $value);
             Charcoal_Cache::set(s('foo'), b(FALSE));
             $value = Charcoal_Cache::get(s('foo'));
             $this->assertEquals(b(FALSE), $value);
             return TRUE;
         case "get_float_data":
             Charcoal_Cache::set(s('foo'), f(3.14));
             $value = Charcoal_Cache::get(s('foo'));
             $this->assertEquals(f(3.14), $value);
             return TRUE;
         case "get_object_data":
             $data = new Charcoal_DTO();
             $data['foo'] = 100;
             $data['bar'] = 'test';
             Charcoal_Cache::set(s('foo'), $data);
             $value = Charcoal_Cache::get(s('foo'));
             echo "value:" . print_r($value, true) . eol();
             $this->assertEquals($data, $value);
             return TRUE;
     }
     return FALSE;
 }