\Numenor\PhpStringWrapper

Wrapper para as funções de string da biblioteca padrão do PHP.

Na minha opinião (e na de muitos desenvolvedores, para falar a verdade), um dos piores aspectos do desenvolvimento em PHP é a nomenclatura das funções da biblioteca padrão. Muitas funções recebem nomes absolutamente idiotas por razões históricas (basicamente, "o nome da função C que executa isso é esse, vamos usar o mesmo nome"), o que acabou não só trazendo antigos hábitos de nomenclatura para dentro de uma linguagem que se pretende moderna, como ainda introduziu alguns novos maus hábitos de nomenclatura novos. E isso sem falar em problemas com ordem de parâmetros inconsistente, comportamentos inconsistentes entre funções que deveriam ser parecidas, etc.

O caso das funções de string é bastante emblemático, pois há exemplos de praticamente todos esses problemas. O site PHP Sadness (http://phpsadness.com) faz um bom trabalho de listar os casos, mas basta olhar para coisas como nl2br(), parse_str() e explode() e notar que não há padrão algum na forma como essas funções são nomeadas, ou seus parâmetros ordenados em comparação com outras funções semelhantes.

Esta classe visa prover uma interface normalizada e uniforme para estas funções de string, de modo que o desenvolvedor possa facilmente autocompletá-las utilizando uma IDE minimamente decente sem ter que ficar lembrando ou consultando a documentação do PHP para lembrar exatamente como determinada função funciona. Eu acredito que os beneficios de clareza e legibilidade superem o custo de overhead de uma chamada a mais de função para executar a operação.

No desenvolvimento desta parte da biblioteca, meu objetivo foi manter um equilíbrio entre o padrão minimalista de nomes do PHP nativo e a ridícula verbosidade de nomes estilo Java. Abreviações, quando fazem sentido, foram mantidas.

Quando possível, a versão mb_* (multibyte) de uma função foi preferida à versão normal que só funciona com conjuntos de caracteres restritos, porque suporte a Unicode deveria ser uma preocupação crucial da linguagem. Da mesma forma, funções que precisam de algum tratamento no input para produzir um output adequado em Unicode já implementam estes tratamentos.

Summary

Methods
Properties
Constants
__construct()
binarioParaHexadecimal()
hexadecimalParaBinary()
caracterAscii()
asciiCaracter()
hashSenha()
separar()
unir()
substituir()
regexBusca()
regexSubstituir()
regexSubstituirCallback()
codificarHtmlEntities()
decodificarHtmlEntities()
codificarBase64()
decodificarBase64()
trim()
reduzir()
primeiraLetraMinuscula()
primeiraLetraMaiuscula()
converterMinusculas()
converterMaiusculas()
converterPalavrasMaiusculas()
quebrarLinha()
No public properties found
REGEX_MULTILINE
REGEX_IGNORE_WS
REGEX_CASE_INSENSITIVE
REGEX_POSIX
REGEX_MODE_JAVA
REGEX_MODE_GNU
REGEX_MODE_GREP
REGEX_MODE_EMACS
REGEX_MODE_RUBY
REGEX_MODE_PERL
REGEX_MODE_POSIXBASIC
REGEX_MODE_POSIXEXTENDED
TRIM_LEFT
TRIM_RIGHT
TRIM_BOTH
removerDelimitadorRegex()
No protected properties found
N/A
No private methods found
No private properties found
N/A

Constants

REGEX_MULTILINE

REGEX_MULTILINE

Parâmetro de expressão regular: múltiplas linhas.

REGEX_IGNORE_WS

REGEX_IGNORE_WS

Parâmetro de expressão regular: ignorar espaços em branco.

REGEX_CASE_INSENSITIVE

REGEX_CASE_INSENSITIVE

Parâmetro de expressão regular: ignorar maiúsculas.

REGEX_POSIX

REGEX_POSIX

Parâmetro de expressão regular: utilizar modo Posix.

REGEX_MODE_JAVA

REGEX_MODE_JAVA

Parâmetro de expressão regular: utilizar modo Java.

REGEX_MODE_GNU

REGEX_MODE_GNU

Parâmetro de expressão regular: utilizar modo GNU.

REGEX_MODE_GREP

REGEX_MODE_GREP

Parâmetro de expressão regular: utilizar modo grep.

REGEX_MODE_EMACS

REGEX_MODE_EMACS

Parâmetro de expressão regular: utilizar modo Emacs.

REGEX_MODE_RUBY

REGEX_MODE_RUBY

Parâmetro de expressão regular: utilizar modo Ruby.

REGEX_MODE_PERL

REGEX_MODE_PERL

Parâmetro de expressão regular: utilizar modo Perl.

REGEX_MODE_POSIXBASIC

REGEX_MODE_POSIXBASIC

Parâmetro de expressão regular: utilizar modo Posix Basic.

REGEX_MODE_POSIXEXTENDED

REGEX_MODE_POSIXEXTENDED

Parâmetro de expressão regular: utilizar modo Posix Extended.

TRIM_LEFT

TRIM_LEFT

Limpar string à esquerda.

TRIM_RIGHT

TRIM_RIGHT

Limpar string à direita.

TRIM_BOTH

TRIM_BOTH

Limpar a string à esquerda e direita.

Methods

__construct()

__construct() 

Método construtor da classe.

Define a codificação UTF-8 como padrão para as operações de regex e manipulação de strings para as funções mb_*.

binarioParaHexadecimal()

binarioParaHexadecimal(string  $string) : string

Converte uma string representando um número binário para hexadecimal.

Parameters

string $string

Texto representando um número binário (p.ex.: 010000010).

Returns

string —

Representação hexadecimal do número binário.

hexadecimalParaBinary()

hexadecimalParaBinary(string  $string) : string

Converte uma string representando um número hexadecimal para binário.

Parameters

string $string

Texto representando um número hexadecimal (p.ex.: 1abf).

Returns

string —

Representação binária do número hexadecimal.

caracterAscii()

caracterAscii(integer  $asciiCode) : string

Retorna o caracter correspondente ao valor do código ASCII informado.

Parameters

integer $asciiCode

Valor do código ASCII do caracter.

Returns

string —

Caracter correspondente ao código.

asciiCaracter()

asciiCaracter(string  $char) : integer

Retorna o código ASCII de um caracter informado.

Parameters

string $char

Caracter ASCII.

Returns

integer —

Código ASCII do caracter.

hashSenha()

hashSenha(string  $senha, integer  $custo = 10, integer  $algoritmo = \PASSWORD_DEFAULT) : string

Cria um hash de senha criptograficamente seguro. O hash gerado é automaticamente "salgado".

Este método deve ser usado preferencialmente no lugar do função crypt, que não salga o hash automaticamente, e portanto pode ser utilizado incorretamente pelo desenvolvedor.

A função password_hash, apesar de relativamente recente, possui algumas inconsistências na sua declaração (como o parâmetro opcional $salt ser marcado como deprecated no PHP 7). Este método visa tornar estas inconsistências transparentes para o desenvolvedor.

Parameters

string $senha

Senha para a qual se quer gerar o hash.

integer $custo

Custo algorítmico do hash gerado. Quanto maior, melhor a força do hash, porém mais demorada é a geração do mesmo. O valor padrão 10 é considerado um bom valor base para o custo com relação ao tempo gasto.

integer $algoritmo

Identificador do algoritmo usado para a geração do hash. Deve ser uma das constantes de senha do PHP.

Throws

\Numenor\Excecao\Php\StringWrapper\ExcecaoHashInvalido

se o hash não pôde ser gerado.

Returns

string —

O hash da senha gerado.

separar()

separar(string  $delimitador, string  $string, integer  $limite = -1) : array

Separa uma string a partir de uma expressão regular delimitadora.

Este método funciona com strings multibyte.

Parameters

string $delimitador

Expressão regular delimitadora. Para fins de uniformização com outras funções de expressão regular, a expressão deve ser passada com o delimitador (normalmente, //).

string $string

Texto a ser separado.

integer $limite

Indica o limite máximo de elementos em que o texto deve ser divido. Se não informado, o padrão é -1 (sem limite).

Returns

array —

Texto dividido.

unir()

unir(string  $unificador, array  $partes) : string

Une uma lista de caracteres utilizando um caracter de união entre cada elemento.

Parameters

string $unificador

Texto inserido entre cada um dos elementos da lista de caracteres.

array $partes

Lista de caracteres.

Returns

string —

Texto resultante.

substituir()

substituir(string  $string, string  $busca, string  $substituicao) : string

Substitui todas as ocorrências de uma string por outra.

Ao contrário de várias outras funções de string da biblioteca padrão, str_replace funciona com strings multibyte; porém, a ordem dos parâmetros é diferente (o texto a ser alterado é o último parâmetro, ao invés do primeiro).

Este método visa corrigir este problema de padronização dos parâmetros.

Parameters

string $string

Texto a ser alterado.

string $busca

Parte do texto a ser substituída.

string $substituicao

Texto de substituição.

Returns

string —

Modificadores da expressão regular de busca.

regexBusca()

regexBusca(string  $string, string  $regex) : boolean

Busca por expressão regular dentro de um texto.

Este método funciona com strings multibyte.

Parameters

string $string

Texto onde será feita a busca.

string $regex

Expressão regular de busca. Para fins de uniformização com outras funções de expressão regular, a expressão deve ser passada com o delimitador (normalmente, //).

Returns

boolean —

Indica se a expressão regular foi encontrada dentro do texto.

regexSubstituir()

regexSubstituir(string  $string, string  $regex, string  $substituicao, string  $opcoes = self::REGEX_POSIX . self::REGEX_MODE_RUBY) : string

Substitui as ocorrências de uma string identificada por uma expressão regular por outra.

Este método funciona com strings multibyte.

Parameters

string $string

Texto a ser alterado.

string $regex

Expressão regular de busca. Para fins de uniformização com outras funções de expressão regular, a expressão deve ser passada com o delimitador (normalmente, //).

string $substituicao

Texto de substituição.

string $opcoes

Modificadores da expressão regular de busca.

Returns

string —

Texto substituído.

regexSubstituirCallback()

regexSubstituirCallback(string  $string, string  $regex, callable  $callback, string  $opcoes = self::REGEX_POSIX . self::REGEX_MODE_RUB) : string

Substitui as ocorrências de uma string identificada por uma expressão regular utilizando uma função de callback.

Este método funciona com strings multibyte.

Parameters

string $string

Texto a ser alterado

string $regex

Expressão regular de busca. Para fins de uniformização com outras funções de expressão regular, a expressão deve ser passada com o delimitador (normalmente, //).

callable $callback

Função de callback que será chamada passando um array dos elementos encontrados dentro do texto a ser alterado.

string $opcoes

Modificadores da expressão regular de busca.

Returns

string —

Texto substituído.

codificarHtmlEntities()

codificarHtmlEntities(string  $string, integer  $flags = \ENT_QUOTES | \ENT_HTML5, string  $encoding = 'UTF-8', boolean  $doubleEncode = true) : string

Codifica todos os caracteres do texto que possuem uma representação como entidade HTML para a entidade correspondente.

$string = "A 'quote' is bold." // Output: "A 'quote' is <b>bold</b>"

Parameters

string $string

Texto a ser codificado.

integer $flags

Máscara de bits das flags indicando como a conversão deve ser efetuada. O padrão ENT_QUOTES | ENT_HTML5 é o mais indicado para a maioria dos casos (codifica todos os caracteres, incluindo aspas, e trata o código como HTML 5).

string $encoding

Codificação do texto usada para fazer a conversão dos caracteres. Dependendo da versão do PHP, o valor padrão deste parâmetro é completamente diferente; por isso, foi definido o padrão como UTF-8.

boolean $doubleEncode

Indica se entidades HTML pré-existentes no texto devem ser codificadas ou não.

Returns

string —

Texto com os caracteres convertidos para suas representações como entidade HTML.

decodificarHtmlEntities()

decodificarHtmlEntities(string  $string, integer  $flags = ENT_COMPAT | ENT_HTML5, string  $codificacao = 'UTF-8') : string

Decodifica as representações de entidade HTML presentes no texto para o caracter correspondente.

$string = 'I'll "walk" the <b>dog</b> now' // Output: 'I'll "walk" the dog now'

Parameters

string $string

Texto a ser codificado.

integer $flags

Máscara de bits das flags indicando como a conversão deve ser efetuada. O padrão ENT_QUOTES | ENT_HTML5 é o mais indicado para a maioria dos casos (codifica todos os caracteres, incluindo aspas, e trata o código como HTML 5).

string $codificacao

Codificação do texto usada para fazer a conversão dos caracteres. Dependendo da versão do PHP, o valor padrão deste parâmetro é completamente diferente; por isso, foi definido o padrão como UTF-8.

Returns

string —

Texto com os caracteres representados como entidades HTML convertidos para os próprios caracteres.

codificarBase64()

codificarBase64(string  $string) : string

Codifica uma string em MIME base64.

Parameters

string $string

Texto a ser codificado.

Returns

string —

O texto codificado em base64.

decodificarBase64()

decodificarBase64(string  $string) : string

Decodifica uma string MIME base64.

Parameters

string $string

Texto a ser decodificado.

Throws

\Numenor\Excecao\Php\StringWrapper\ExcecaoDecodificacaoInvalida

se ocorrer um erro na decodificação do texto.

Returns

string —

O texto decodificado.

trim()

trim(string  $string, string  $onde = self::TRIM_BOTH, string  $caracteres = '') : string

Remove caracteres do início e/ou do final da string.

Parameters

string $string

Texto a ser tratado.

string $onde

Indica onde deve ocorrer a remoção dos caracteres (esquerda/início, direita/fim, ou ambos).

string $caracteres

Lista de caracteres que devem ser removidos.

Returns

string —

Texto com os caracteres informados removidos do início e/ou do final.

reduzir()

reduzir(string  $string, integer  $inicio, integer  $largura, string  $marcador = '') : string

Reduz um texto para o tamanho informado, opcionalmente posposto por um texto de marcação.

O texto reduzido é tratado de forma que ele não termine em espaço em branco, mesmo que isto torne-o menor do que o tamanho desejado. Este método funciona com strings multibyte.

Parameters

string $string

Texto a ser reduzido.

integer $inicio

Posição do texto onde deve começar a redução.

integer $largura

Largura máxima do texto reduzido.

string $marcador

Texto de marcação a ser inserido após a redução do texto.

Returns

string —

Texto reduzido.

primeiraLetraMinuscula()

primeiraLetraMinuscula(string  $string) : string

Converte o primeiro caracter do texto informado para minúscula.

Ao contrário da função lcfirst(), este método funciona com strings multibyte.

Parameters

string $string

Texto a ser tratado.

Returns

string —

Texto com o primeiro caracter convertido para minúscula.

primeiraLetraMaiuscula()

primeiraLetraMaiuscula(string  $string) : string

Converte o primeiro caracter do texto informado para maiúscula.

Ao contrário da função ucfirst, este método funciona com strings multibyte.

Parameters

string $string

Texto a ser tratado.

Returns

string —

Texto com o primeiro caracter convertido para minúscula.

converterMinusculas()

converterMinusculas(string  $string) : string

Converte o texto inteiro para minúsculas.

Parameters

string $string

Texto a ser tratado.

Returns

string —

Texto convertido para minúsculas.

converterMaiusculas()

converterMaiusculas(string  $string) : string

Converte o texto inteiro para maiúsculas.

Parameters

string $string

Texto a ser tratado.

Returns

string —

Texto convertido para maiúsculas.

converterPalavrasMaiusculas()

converterPalavrasMaiusculas(string  $string) : string

Transforma o texto convertendo a primeira letra de cada palavra que o compõe para maiúscula, e o restante para minúscula.

$string = 'mary had a Little lamb and she loved it so' // Output: 'Mary Had A Little Lamb And She Loved It So'

Parameters

string $string

Texto a ser tratado.

Returns

string —

Texto convertido para maiúsculas.

quebrarLinha()

quebrarLinha(string  $string, integer  $largura = 75, string  $quebra = "\n", boolean  $cortar = false) : string

Introduz um caracter de quebra na string a cada N caracteres.

Ao contrário da função wordwrap(), este método funciona com caracteres multibyte. Entretanto, ele não é otimizado, sendo desaconselhável utilizá-lo em laços de repetição. Implementação adaptada da solução criada pelo usuário Fosfor, em: http://stackoverflow.com/questions/3825226/multi-byte-safe-wordwrap-function-for-utf-8

Parameters

string $string

Texto a ser dividido.

integer $largura

Largura máxima do texto antes da introdução do caracter de quebra.

string $quebra

Caracter de quebra.

boolean $cortar

Indica se a quebra pode ser inserida no meio de uma palavra. Caso este parâmetro seja false, a quebra é feita sempre após uma palavra, mesmo que isso faça a largura daquele trecho do texto ser menor que o tamanho máximo.

Returns

string —

Texto dividido.

removerDelimitadorRegex()

removerDelimitadorRegex(string  $regex) : string

Remove o primeiro e o último caracter de uma expressão regular.

As funções de expressão regular da biblioteca mb_* têm uma pegadinha no seu parâmetro $delimiter: embora seja esperada uma expressão regular, a mesma deve ser informada sem o delimitador, ao contrário das funções padrão que trabalham com expressões regulares (por exemplo, preg_match()). Este método corrige este problema de padronização e aceita a expressão regular com o delimitador.

$regex = '/^(a|b)?$/'; // Output: '^(a|b)?$'

Parameters

string $regex

Expressão regular.

Returns

string