A conversão entre diferentes tipos de dados pode ser necessária quando se realiza operações aritméticas com variáveis. Elas podem ser realizadas por meio da função settype. O Código abaixo demonstra a conversão de tipo de alguns tipos apresentados no artigo “Um simples programa PHP“.
<?php print( '<?xml version = "1.0" encoding = "utf-8"?>' ) ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!-- Conversão entre tipos de dados. --> <html xmlns = "http://www.w3.org/1999/xhtml"> <head> <title>Conversão entre tipos de dados</title> </head> <body> <?php // declara uma string, um double e um inteiro $testString = "3.5 segundos"; $testDouble = 79.2; $testInteger = 12; ?><!-- fim do script PHP --> <!-- Imprime o valor e o tipo de cada da variável --> <?php echo "$testString é um(a) " . gettype( $testString ) . "<br />" ; echo "$testDouble é um(a) " . gettype( $testDouble ) . "<br />" ; echo "$testInteger é um(a) " . gettype( $testInteger) . "<br />" ; ?><!-- fim do script PHP --> <br /> convertendo para outros tipos de dados:<br /> <?php // chama a função settype para converter a variável // testString para diferentes tipos de dados echo "$testString"; settype( $testString, "double" ); echo " como um double é $testString <br />" ; echo "$testString"; settype( $testString, "integer" ); echo " como um inteiro é $testString <br />"; settype( $testString, "string" ); echo "convertendo de volta para uma string o resultado é $testString <br /><br />"; // usa conversão de tipos para converter variáveis para um tipo diferente $data = "98.6 graus"; echo "antes da conversão, $data é um " . gettype( $data ) . "<br /><br />"; echo "usuando a conversão de tipos temos: <br /> como um double: " . (double) $data . "<br />como um inteiro: " . (integer) $data; echo "<br /><br />depois da conversão, $data é um " . gettype( $data ); ?><!-- fim do script PHP --> </body> </html>
As linhas 13-15 do código acima atribuem uma string à variável $testString, um número de ponto flutuante à variável $testDouble e um inteiro à variável $testInteger. As variáveis são automaticamente convertidas para o tipo do valor que recebem. Por exemplo, a variável $testString torna-se uma string quando recebe o valor “3.5 segundos”. As linhas 19-23 imprimem na tela por meio de um echo o valor de cada variável e seus tipos usando a função gettype, que retorna o tipo atual de seu argumento. Observe que, quando uma variável está em uma instrução echo, mas não faz parte de uma string, não é necessário delimitar o nome dela com aspas duplas. As linhas 31, 34 e 36 chamam settype para modificar o tipo de cada variável. A função settype recebe dois argumentos: a variável cujo tipo deve ser alterado e o novo tipo da variável.
A chamada da função settype pode resultar em perda de dados – doubles, por exemplo, são truncados quando convertidos para integers. Ao converter de uma string para um número, o PHP usa o valor do número que aparece no início da string, e caso não exista esse número, a string será avaliada como 0. Na linha 31, a string “3.5 segundos” é convertida para um double, armazenando 3.5 na variável $testString. Na linha 34, 3.5 é convertido para o integer 3. Quando convertemos essa variável para uma string (linha 36), o valor da variável torna-se “3” – a maior parte do conteúdo original da declaração da variável na linha 13 se perde.
Outra opção para converter entre tipos é o casting ou conversão de tipo. Diferentemente de settype, o casting não muda o conteúdo de uma variável, mas cria na memória uma cópia temporária do valor dela. As linha 42-43 convertem o valor da variável $data (declarada na linha 39) de um string para um double e um integer. O casting é útil quando um tipo diferente é exigido em uma operação específica, contudo, você deseja reter o valor e tipo originais da variável. As linhas 40-44 mostram que o tipo e o valor de $data permanecem inalterados mesmo depois de ela ter sido convertida várias vezes.
O operador de concatenação (.) combina múltiplas strings na mesma instrução echo, conforme demonstramos nas linhas 40-44. Na instrução echo também pode-se usar a vírgula (,) para concatenar múltiplas strings como demostrado na linha 40.
Referências
DEITEL, Paul; DEITEL, Harvey. Ajax, Rich Internet Applications e desenvolvimento Web para programadores. 1. ed. São Paulo: Pearson Prentice Hall, 2008. Cap. 19, p.463-464. Tradução: Célia Taniwaki e Daniel Vieira; Revisão técnica Daniel da Costa Uchôa.