Manipulação de tipos

O PHP não requer ( ou suporta ) a definição de tipo explicita na declaração de variáveis : o tipo de uma variável é determinado pelo contexto em que a variável é utilizada . Isto significa que , se você assimila um valor string para a variável var , var se torna uma string . Se você então assimila um valor inteiro para var , ela se torna um inteiro .

Um exemplo da conversão automática do PHP é o operador de adição ' + ' . Se qualquer um dos operadores for float , então todos os operadores são avaliados como floats , e o resultado será um float . De outra forma , se os operadores forem interpretados como inteiros então o resultado será um inteiro . Note que isso NÃO muda os tipos dos operadores : apenas muda em como esses operadores são avaliados .

 
$foo

 
=

 
"

 
0"

 
;

 
/

 
/

 
$foo

 
é

 
string

 
(ASCII

 
48

 
)

 
$foo

 
+=

 
2

 
;

 
/

 
/

 
$foo

 
é

 
agora

 
um

 
inteiro

 
(2

 
)

 
$foo

 
=

 
$foo

 
+

 
1.3

 
;

 
/

 
/

 
$foo

 
é

 
agora

 
um

 
float

 
(3.3

 
)

 
$foo

 
=

 
5

 
+

 
"10

 
Little

 
Piggies"

 
;

 
/

 
/

 
$foo

 
é

 
inteiro

 
(15

 
)

 
$foo

 
=

 
5

 
+

 
"10

 
Small

 
Pigs"

 
;

 
/

 
/

 
$foo

 
é

 
inteiro

 
(15

 
)





Se os últimos dois exemplos lhe parecerem estranhos , veja Conversão de strings .

Se você deseja forçar uma variável para ser avaliada como um certo tipo , veja a seção Moldando o tipo ( casting ) . Se você deseja mudar o tipo de uma variável , veja settype( ) .

Se quiser testar qualquer um dos exemplo desta seção , você pode usar a função var_dump( ) .

Nota : O comportamento de uma conversão automática para array é atualmente indefinida .

 
$a

 
=

 
"

 
1"

 
;

 
/

 
/

 
$a

 
é

 
uma

 
string

 
$a[0

 
]

 
=

 
"f"

 
;

 
/

 
/

 
E

 
com

 
relação

 
aos

 
índices

 
da

 
string

 
?




 
O

 
que

 
acontece

 
?





Desde que o PHP suporta indexação de strings através de offsets utilizando a mesma sintaxe da indexação de arrays , o exemplo acima nos deixa um problema : $a se tornou um array sendo o primeiro elemento " f" , ou será que "f " se tornou o primeiro caracter da string $a ?

Por essa razão , como no PHP 3.0.12 e PHP 4.0b3-RC4 , o resultado dessa conversão automática é considerada como indefinida . Correções , entretanto , estão sendo discutidas .

Moldando Tipos - Type Casting

A moldagem de tipos no PHP funciona como no C : o nome de um tipo desejado é escrito entre parênteses antes da variável em que se deseja a moldagem .

 
$foo

 
=

 
10

 
;

 
/

 
/

 
$foo

 
é

 
um

 
inteiro

 
$bar

 
=

 
(float

 
)

 
$foo

 
;

 
/

 
/

 
$bar

 
é

 
um

 
número

 
de

 
ponto

 
flutuante





As moldagens permitidas são :



Nota : Em vez de moldar uma variável para string , você também pode circundar a variável entre aspas .

Note que tabulações e espaços são permitidos dentro dos parênteses , então o seguinte são funcionalmente equivalentes :

 
$foo

 
=

 
(

 
int

 
)

 
$bar

 
;

 
$foo

 
=

 
(

 
int

 
)

 
$bar

 
;





Pode não ser tão óbvio o que exatamente ocorre quando se molda entre certos tipos . Para mais informações , veja essas seções :



Quando moldando ou forçando a conversão de um array para string , o resultado será a palavra Array . Quando moldando ou forçando o tipo de um objeto para string , o resultado será a palavra Object .

Quando moldando de uma variável escalar ou string para um array , a variável se torna o primeiro elemento do array :

 
$var

 
=

 
'

 
ciao'

 
;

 
$arr

 
=

 
(array

 
)

 
$var

 
;

 
echo

 
$arr[0]

 
;

 
/

 
/

 
outputs

 
'ciao

 
'





Quando moldando de uma variável escalar ou string para um objeto , a variável se torna um atributo do objeto : o nome do atributo se chamará ' scalar ' :

 
$var

 
=

 
'

 
ciao'

 
;

 
$obj

 
=

 
(object

 
)

 
$var

 
;

 
echo

 
$obj

 
-

 
scalar

 
;

 
/

 
/

 
imprime

 
'ciao

 
'