O PHP pode converter o tipo de dado de uma variável, se necessário, dado o contexto em que é usado automaticamente. Por esta razão tipo explícito conversões são raramente necessário. No entanto, o tipo de uma variável ou expressão pode ser alterada através da realização de um tipo “cast explícito” ou Conversão explícita.
Conversões explícitas
Uma conversão explícita é realizada colocando-se o tipo de dados desejado entre parênteses antes da variável ou o valor que está a ser avaliada. No exemplo abaixo, o cast explícito força a variável bool para ser avaliada como um int.
<?php $myBool = false; $myInt = (int)$myBool; // 0 ?>
Um uso para conversões explícitas podem ser vistas quando a variável bool é enviado como saída para a página. Devido ao tipo automático conversões o valor false se torna uma vazia e portanto não é exibido. Ao primeiro convertê-lo para um número inteiro, o valor false vai aparecer como zero.
<?php echo $myBool; // "" echo (int)$myBool; // "0" ?>
Tipos de cast estão listados na tabela abaixo.
Nome | Descrição |
(int), (integer) | Cast para int |
(bool), (boolean) | Cast para bool |
(float), (double), (real) | Cast para float |
(string) | Cast para string |
(array) | Cast para array |
(object) | Cast para object |
(unset) | Cast para null |
Para dar alguns exemplos, o cast array irá converter um tipo escalar para uma matriz com um único elemento. Ele executa a mesma função que usando o construtor array.
<?php $myInt = 10; $myArr = (array)$myInt; $myArr = array($myInt); // o mesmo que acima echo $myArr[0]; // "10" ?>
Se um tipo escalar como int é convertido em objeto torna-se uma instância da classe interna stdClass. O valor da variável será armazenado em uma propriedade desta classe chamada escalar.
<?php $myObj = (object)$myInt; echo $myObj->scalar; // "10" ?>
O cast faz a variável unset ser nulo. Apesar do nome, ele realmente não retirar a variável. O cast só existe para complementar, como nulo é considerado um tipo de dados.
<?php $myNull = (unset)$myInt; $myNull = null; // o mesmo que acima ?>
Settype
Uma conversão explícita não altera o tipo da variável que precede, apenas como ela é avaliada em que expressão. Para alterar o tipo de uma variável a função settype pode ser usado, levando dois argumentos. O primeiro é a variável a ser convertida e o segundo é o tipo de dados dada como uma string.
$myVar = 1.2; settype($myVar, 'int'); // convert variable to int
Alternativamente, um tipo de conversão pode ser realizada armazenando o resultado de uma conversão explícita de volta na mesma variável.
$myVar = 1.2; $myVar = (int)$myVar; // 1
Gettype
Relacionado a settype é a função gettype, que retorna o tipo da fornecida argumento como uma string legível.
$myBool = true; echo gettype($myBool); // "boolean"