Manuale PHP
Indietro | Capitolo 11. Types | Avanti

# Type Juggling

PHP does not require (or support) explicit type definition in variable declaration; a variable's type is determined by the context in which that variable is used. That is to say, if you assign a string value to variable $var, $var becomes a string. If you then assign an integer value to $var, it becomes an integer.

An example of PHP's automatic type conversion is the addition operator '+'. If any of the operands is a float, then all operands are evaluated as floats, and the result will be a float. Otherwise, the operands will be interpreted as integers, and the result will also be an integer. Note that this does NOT change the types of the operands themselves; the only change is in how the operands are evaluated.

`<?php $foo = "0"; // $foo is string (ASCII 48) $foo += 2; // $foo is now an integer (2) $foo = $foo + 1.3; // $foo is now a float (3.3) $foo = 5 + "10 Little Piggies"; // $foo is integer (15) $foo = 5 + "10 Small Pigs"; // $foo is integer (15) ?>`

If the last two examples above seem odd, see String conversion to numbers.

If you wish to force a variable to be evaluated as a certain type, see the section on Type casting. If you wish to change the type of a variable, see settype().

If you would like to test any of the examples in this section, you can use the var_dump() function.

> Nota: The behaviour of an automatic conversion to array is currently undefined.

> `<?php $a = "1"; // $a is a string $a[0] = "f"; // What about string offsets? What happens? ?>`

> Since PHP (for historical reasons) supports indexing into strings via offsets using the same syntax as array indexing, the example above leads to a problem: should $a become an array with its first element being "f", or should "f" become the first character of the string $a?

> The current versions of PHP interpret the second assignment as a string offset identification, so $a becomes "f", the result of this automatic conversion however should be considered undefined. PHP 4 introduced the new curly bracket syntax to access characters in string, use this syntax instead of the one presented above:

> `<?php $a = "abc"; // $a is a string $a{1} = "f"; // $a is now "afc" ?>`

> See the section titled String access by character for more information.

## Type Casting

Type casting in PHP works much as it does in C: the name of the desired type is written in parentheses before the variable which is to be cast.

`<?php $foo = 10; // $foo is an integer $bar = (boolean) $foo; // $bar is a boolean ?>`

The casts allowed are:

- (int), (integer) - cast to integer

- (bool), (boolean) - cast to boolean

- (float), (double), (real) - cast to float

- (string) - cast to string

- (array) - cast to array

- (object) - cast to object

Note that tabs and spaces are allowed inside the parentheses, so the following are functionally equivalent:

`<?php $foo = (int) $bar; $foo = ( int ) $bar; ?>`

> Nota: Instead of casting a variable to string, you can also enclose the variable in double quotes.

> `<?php $foo = 10; // $foo is an integer $str = "$foo"; // $str is a string $fst = (string) $foo; // $fst is also a string // This prints out that "they are the same" if ($fst === $str) { echo "they are the same"; } ?>`

It may not be obvious exactly what will happen when casting between certain types. For more info, see these sections:

- Converting to boolean

- Converting to integer

- Converting to float

- Converting to string

- Converting to array

- Converting to object

- Converting to resource

- The type comparison tables

Indietro | Partenza | Avanti
Pseudo-types used in this documentation | Risali | Variables