Graças a um erro em uma função criada por mim, meu site estava com um bug constrangedor, pelo menos agora já está corrigido.
O problema da função que criei era que ela deveria retornar um array, mas, devido a um lapso momentâneo meu, ela estava retornando uma string. Acontece que o PHP considera uma string como um array de caracteres, mas até aí isso parece uma consideração bem lógica. Se você tem a varável $nome por exemplo, você pode acessar o primeiro caractere assim:
$nome = "Maria";
echo $nome[0]; // escreve M
Mas quando eu recebia o retorna da minha função eu não estava usando números inteiros como índice para acessar os valores do array (como usei o 0 no exemplo anterior). Eu usei strings como indices. Nestas horas que a tipagem fraca do PHP conjuntamente com uma inferência de tipos bem flexível mostra uma das desvantagens da plataforma (pelo menos para os mais desavisados como eu estava neste caso). O que você esperaria como saída no código abaixo:
$nome = "Maria";
echo $nome['valor']; //????
Bom, de acordo com a documentação do PHP, valores não inteiros usados como índice para strings são convertidos para inteiros. E o que o PHP faz quando tem que converter uma string como 'valor' (que não tem nada de número inteiro) para inteiro? Bem ele converte para 0 (zero). Silenciosamente ele converte um índice do tipo string para 0 do tipo inteiro. Assim o código assima exibe a mesma saída do código anterior a ele.
Isso não é um ataque ao PHP, o erro foi meu. Isso só serve para mostrar que você deve tomar bastante cuidado com estas conversões de tipo implícitas que o PHP faz.
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário