Dando continuidade a série de artigos sobre Strings no PHP, irei falar nessa semana sobre comparação de Strings, mostrando quais os erros mais comuns quando tentamos comparar dados de diferentes tipos e quais as funções mais comuns de comparação de Strings.
Comparação é, talvez, uma das operações mais comuns realizadas em Strings. Muitas vezes essas comparações podem se tornar uma gande dor de cabeça para os desenvolvedores, devido ao mecanismo “type-juggling”, que é a habilidade de converter tipos de dados de maneira transparente. Isso faz explodir a cabeça de qualquer programador que não for totalmente atendo, veja:
$string = "123ab";
if( $string == 123 ){
// A String é igual a 123
}
Teoricamente essa comparação deveria retornar false, mas devido o PHP converte transparentemente a string para inteiro trazendo apenas a parte 123, fazendo com que a comparação torne-se verdadeira. A melhor maneira de se fazer essa comparação é usando o operador ===, que compara se as partes são idênticas. Outra maneira de resolver isso, é usando funções de comparação de string que o PHP disponibiliza, como as strcmp() e a strcasecmp(). Ambas fazem a mesma coisa, com a diferença que a primeira é “case-sensitive” já a segunda não:
$str = "Hello Word";
if( strcmp( $str, "hello word" ) ){
//não entrará aqui
}
if( strcasecmp( $str, "hello word" ) ){
// entrará aqui, pois essa função não
// diferencia maiúsculas e minúsculas
}
Uma outra função variante dessas é a strncasecmp(). Essa função é igual a strcasecmp() com a vantagem de você poder especificar apenas uma parte de uma string a ser comparada, veja:
$s1 = "abcd1234"; $s2 = "abcd5678"; // compara os primeiro quatro caracteres. strncasecmp($s1, $s2, 4);
Foram poucas as vezes que eu vi o uso dessa função, na maioria das vezes podemos usar a função substr_compare() para compararmos pedaços de strings:
echo substr_compare("abcde", "bc", 1, 2); // 0
Vejam a semelhança no nome das funções de comparação, temos que ter muito cuidado na hora de ler o código fonte com essas funções. Devido a essa semelhança questões sobre essas funções são comuns cairem nos exames de ZCE.
Bem pessoas, ficarei só com isso por hoje, semana que vem teremos mais um artigo sobre strings. ABS.

[...] Comparando [...]
Simplesmente demais cara! Me ajudou muito, eu estava até pensando em criar uma função que compara X caracteres de uma string, mas vi que strcasecmp faz isso facilmente… hehe
Abraços.