protected function hashKey($key)
    {
        if ($key instanceof \DateTime) {
            return md5('_' . $key->format('c'));
        } elseif (is_object($key)) {
            return spl_object_hash($key);
        } elseif (false === $key) {
            return md5('_false');
        } elseif (true === $key) {
            return md5('_true');
        } elseif (null === $key) {
            return md5('_null');
        } elseif (is_array($key)) {
            array_multisort($key);
            return md5(json_encode($key));
        } elseif (is_int($key)) {
            return md5('_' . $key);
        } elseif (is_float($key)) {
            return md5('_' . $key);
        } else {
            return md5(strval($key));
        }
    }