public static function underscore($string) {
        return static::cache(array(__METHOD__, $string), function() use ($string) {
            return trim(mb_strtolower(str_replace('__', '_', preg_replace('/([A-Z]{1})/', '_$1', preg_replace('/[^_a-z0-9]+/i', '', preg_replace('/[\s]+/', '_', $string))))), '_');
        });
    }