Você realmente conhece o tipo integer oferecido por PHP? Ele representa um número inteiro. Bom, mas não estamos aqui para falar o que todo mundo que programa em PHP já sabe. Vamos falar sobre coisas interessantes.
Representação de Números Inteiros
O tipo inteiro pode ser expresso de 3 maneiras básicas:
- Notação em base decimal
- Notação em base octal
- Notação em base hexadecimal
Todas as notações aceitam valores negativos quando precedidos do símbolo "-" (sem as aspas).
Na base decimal, o número pode ser zero ou começar com um dígito diferente de zero e ser acompanhado, opcionalmente, de dígitos entre 0 e 9. É a forma mais comum de representar um número.
$i = 0; // Zero $i = 1; // Um $i = 13; // Treze
Na base octal, o número precisa começar com o dígito zero e ser acompanhado por uma sequência de dígitos entre 0 e 7. Acho que é a forma mais incomum de representar um número. Que eu me recorde, a única aplicação desta notação é para utilização pela função chmod ou mkdir. Estas funções recebem valores octais. No sistema de permissões do Linux, este tipo de notação é bastante conhecida para aplicar permissões sobre arquivos ou diretórios.
$o = 00; // Zero $o = 01; // Um (decimal) $o = 07; // Sete (decimal) $o = 010; // Oito (decimal) $o = 011; // Nove (decimal) $o = 012; // Dez (decimal) // Colocar permissao sobre o arquivo /tmp/arquivo // Dono: ler, escrever, executar // Grupo: ler, executar // Outros: ler chmod('/tmp/arquivo', 0751); // Para entender como funciona, você precisa ver o numero em binario: // Octal / Binario // 7 / 111 // 6 / 110 // 5 / 101 // 4 / 100 // 3 / 011 // 2 / 010 // 1 / 001 // 0 / 000 // // Primeiro bit = permissao leitura (read) // Segundo bit = permissao escrita (write) // Terceiro bit = permissao execucao (execute)
Finalmente, na base hexadecimal, o número precisa começar com o prefixo "0x" (sem as aspas) e ser seguido de uma sequência de dígitos entre 0 e F (sendo que as letras de "a" até "f" não são sensíveis à caixa). Esta notação é mais comum que a notação octal. Pode ser usada, por exemplo, para repreentar valores entre 0 e 255, que são comuns para representar cores em RGB.
$h = 0x0; // Zero (decimal) $h = 0x1; // Um (decimal) $h = 0x9; // Nove (decimal) $h = 0xA; // Dez (decimal) $h = 0xB; // Onze (decimal) $h = 0xE; // Quinze (decimal) $h = 0xF; // Dezesseis (decimal) $h = 0x10; // Dezessete (decimal) $h = 0xFF; // 255 (decimal) $h = 0x1B3; // 435 (decimal)
Conversão para Inteiro
Uma característica interessante de PHP é a facilidade de converter valores entre os diferentes tipos. Mas você sabe o que ocorre com um valor quando é convertido para inteiro?
Float para Int
Quando um valor real é convertido para inteiro, suas casas decimais são ignoradas.
$i = intval(0.1); // $i = 0; $i = intval(0.5); // $i = 0; $i = intval(0.9); // $i = 0; $i = intval(4.1); // $i = 4; $i = intval(4.9999999); // $i = 4; $i = intval(-1.1); // $i = -1; $i = intval(-1.9); // $i = -1;
Observe que você não pode dizer que o valor é arredondado para baixo, já que para valores negativos ele é arredondado para cima (para um valor menos negativo).
Bool para Int
O valor true é convertido para o inteiro 1 (um), enquanto o valor false é convertido para o inteiro 0 (zero).
$i = intval(true); // $i = 1; $i = intval(false); // $i = 0;
Array para Int
Array vazios são convertidos para o inteiro 0 (zero), enquanto os arrays não vazios são convertidos para o inteiro 1 (um).
$i = intval(array(3, 5, 2)); // $i = 1; $i = intval(array()); // $i = 0;
String para Int
A conversão de uma string para inteiro é a mais complexa. A string é analisada da esquerda para a direira. Enquanto o dígito capturado é um numérico, ele é considerado parte do número. Assim que um dígito não númerico é encontrado ou a string terminou, o processamento é convertido. O número é avaliado apenas na notação decimal. A única exceção é sobre o símbolo "-", que indica que o valor é negativo.
$i = intval('0'); // 0 $i = intval('a'); // 0 $i = intval('1'); // 1 $i = intval('01'); // 1 $i = intval('012'); // 12 $i = intval('13a14'); // 13 $i = intval('a123'); // 0 $i = intval('12 13 14'); // 12 $i = intval('-12 -13 -14'); // -12
Object para Int
Objetos não podem ser convertidos em Inteiro.
Curiosidades
A função "is_int" ou "is_integer" verifica se uma variável tem o tipo inteiro. Uma string com o valor "1" não é considerado um inteiro, embora possua um valor numérico. Já a função "is_numeric" verifica se o valor informado é um número. Isso incluem valores inteiros, reais ou string com valores que podem ser convertidos para inteiro ou real utilizando todos os caracteres.
$b = is_int(1); // true
$b = is_int(-4); // true
$b = is_int(2.3); // false
$b = is_int('1'); // false
$b = is_numeric(1); // true
$b = is_numeric(-4); // true
$b = is_numeric(2.3); // true
$b = is_numeric('1'); // true
$b = is_numeric('2.3'); // true
$b = is_numeric('0x1F'); // true (hexadecimal) false a partir do PHP 7
$b = is_numeric('4e2'); // true (4 * 102)
$b = is_numeric('12a'); // false (caractere "a" foi ignorado)
$b = is_numeric('a'); // false (caractere "a" não é digito)
$b = is_numeric('-1'); // true
0 comentários
Postar um comentário
Nota: fique a vontade para expressar o que achou deste artigo ou do blog.
Dica: para acompanhar as respostas, acesse com uma conta do Google e marque a opção "Notifique-me".
Atenção: o blogger não permite inclusão de tags nos comentários, por isso, use algum site externo para postar seu código com dúvidas e deixe o link aqui. Exemplo: pastebin.com