O PHP não requer (ou suporta) a definição explícita de tipo na declaração da variável; um tipo de variável é determinado pelo contexto na qual a variável é usada. Quer dizer, se você atribui um valor de string a uma variável var, var se torna uma string. Se você então atribui um valor inteiro a var, ela se torna inteira.
Um exemplo de conversão automática de tipo no PHP é o operador de adição '+'. Se qualquer um dos operandos é um 'double', então todos os operandos são avaliados como 'doubles', e o resultado será um 'double'. Caso contrário, os operandos serão interpretados como inteiros, e o resultado também será um inteiro. Note que isto NÃO muda os tipos dos próprios operandos; a única mudança é em como os operandos são avaliados.
$foo = "0"; // $foo é string (ASCII 48) $foo++; // $foo é a string "1" (ASCII 49) $foo += 1; // $foo agora é um inteiro (2) $foo = $foo + 1.3; // $foo agora é um double (3.3) $foo = 5 + "10 Porquinhos"; // $foo é inteiro (15) $foo = 5 + "10 Porquinhos"; // $foo é inteiro (15) |
Se os últimos dois exemplos acima parecem incomuns, veja Conversão de Strings.
Se você deseja forçar uma variável a ser avaliada como um certo tipo, veja a seção sobreMoldagem de tipo. Se você deseja mudar o tipo de uma variável, veja settype().
Se você gostaria de testar qualquer um dos exemplos desta seção, você pode cortar e colar os exemplos e inserir a seguinte linha para ver, por você mesmo, o que está acontecendo:
Nota: O comportamento de uma conversão automática para matriz não é definida no momento.
Enquanto o exemplo acima pode parecer que vai claramente resultar em $a se tornar uma matriz, do qual o primeiro elemento é 'f', considere isto:
Como o PHP suporta indexação para strings através de compensações usando a mesma sintaxe que a indexação de matrizes, o exemplo acima conduz a um problema: $a deveria se tornar uma matriz com seu primeiro elemento sendo "f", ou "f" deveria se tornar o primeiro caractere da string $a?
Por esta razão, como no PHP 3.0.12 e no PHP 4.0b3-RC4, o resultado desta conversão automática é considerado indefinido. Correções estão, portanto, sendo discutidas.
Moldagem de tipo no PHP funciona de forma semelhante ao C: o nome do tipo desejado é escrito entre parênteses antes da variável que se quer moldar.
As moldagens permitidas são:
(int), (integer) - molda para inteiro
(real), (double), (float) - molda para 'double'
(string) - molda para string
(array) - molda para matriz
(object) - molda para objeto
Note que tabulações e espaços são permitidos dentro dos parênteses, assim os exemplos a seguir são funcionalmente equivalentes:
Pode não ser exatamente óbvio o que acontece quando ocorre a moldagem entre certos tipos. Por exemplo, o seguinte deve ser notado.
Quando se molda uma variável escalar ou string para uma matriz, a variável se tornará o primeiro elemento da matriz:
Quando se molda uma variável escalar ou string para um objeto, a variável se tornará um atributo do objeto; o nome do atributo será 'scalar':