private function _filter_build_unique_id($tag, $function, $priority)
    {

        static $filter_id_count = 0;

        if (is_string($function)) {
            return $function;
        }

        if (is_object($function)) {
            // Closures are currently implemented as objects
            $function = array($function, '');
        } else {
            $function = (array)$function;
        }

        if (is_object($function[ 0 ])) {
            // Object Class Calling
            if (function_exists('spl_object_hash')) {
                return spl_object_hash($function[ 0 ]) . $function[ 1 ];
            } else {
                $obj_idx = get_class($function[ 0 ]) . $function[ 1 ];
                if ( ! isset($function[ 0 ]->filter_id)) {
                    if (false === $priority) {
                        return false;
                    }
                    $obj_idx .= isset($this->filter[ $tag ][ $priority ]) ? count((array)$this->filter[ $tag ][ $priority ]) : $filter_id_count;
                    $function[ 0 ]->filter_id = $filter_id_count;
                    ++$filter_id_count;
                } else {
                    $obj_idx .= $function[ 0 ]->filter_id;
                }

                return $obj_idx;
            }
        } elseif (is_string($function[ 0 ])) {
            // Static Calling
            return $function[ 0 ] . '::' . $function[ 1 ];
        }
    }