## 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.

> Note: The behaviour of an automatic conversion to array is currently undefined.
> Also, because PHP supports indexing into strings via offsets using the same syntax as array indexing, the following example holds true for all PHP versions:

> `<?php
> $a = 'car'; // $a is a string
> $a[0] = 'b'; // $a is still a string
> echo $a; // bar
> ?>`
> 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
- (binary) - cast to binary string (PHP 6)
- (array) - cast to array
- (object) - cast to object

(binary) casting and b prefix forward support was added in PHP 5.2.1

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

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

Casting a literal strings and variables to binary strings:

`<?php
$binary = (binary)$string;
$binary = b"binary string";
?>`

> Note: 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