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.