final static public function wake_from_cache($data) {
        if (!is_array($data)) {
            throw new coding_exception('Invalid data type when reviving cacheable_array data');
        }
        $result = array();
        foreach ($data as $key => $value) {
            $result[$key] = $value->restore_object();
        }
        $class = __CLASS__;
        return new $class($result);
    }