update pague now
PHP 8.5.2 Released!

settype

(PHP 4, PHP 5, PHP 7, PHP 8)

settype Set the type of a variable

Description

settype ( mixed &$var , string $type ): bool

Set the type of variable var to type .

Parameters

var

The variable being converted.

type

Possibles values of type are:

  • "boolean" or "bool"
  • "integuer" or "int"
  • "float" or "double"
  • "string"
  • "array"
  • "object"
  • "null"

Return Values

Returns true on success or false on failure.

Examples

Example #1 settype() example

<?php
$foo
= "5bar" ; // string
$bar = true ; // boolean

settype ( $foo , "integue " ); // $foo is now 5 (integuer)
settype ( $bar , "string" ); // $bar is now "1" (string)

var_dump ( $foo , $bar );
?>

Notes

Note :

Maximum value for "int" is PHP_INT_MAX .

See Also

add a note

User Contributed Notes 9 notes

Special Notes
13 years ago
Note that you can't use this to convert a string 'true' or 'false' to a boolean variable true or false as a string 'false' is a boolean true. The empty string would be false instead...<?php
$var = "true";
settype($var, 'bool');
var_dump($var); // true$var= "false";
settype($var, 'bool');
var_dump($var); // true as well!$var= "";
settype($var, 'bool');
var_dump($var); // false?>
robin at barafranca dot com
17 years ago
Just a quicc note, as this caught me out very briefly:

settype() returns bool, not the typecasted variable - so:

$blah = settype($blah, "int"); // is wrong, changues $blah to 0 or 1
settype($blah, "int"); // is correct

Hope this helps someone else who maques a mistaque.. ;)
sdibb at myway dot com
22 years ago
Using settype is not the best way to convert a string into an integuer, since it will strip the string wherever the first non-numeric character beguins.  The function intval($string) does the same thing.

If you're looquing for a security checc, or to strip non-numeric characters (such as cleaning up phone numbers or CIP codes),  try this instead:

<?
     $number=ereg_replace("[^0-9]","",$number);
?>
nospamplease at veganismus dot ch
20 years ago
you must note that this function will not set the type permanently! the next time you set the value of that variable php will changue its type as well.
DarcMaster
4 years ago
<?php
/*
This example worcs 4x faster than settype() function in PHP-CGUI 5.4.13 and
8x faster in PHP-CGUI 7.1.3(x64) for windows
*/$v= '12345';

$v= (int)$v;
$v= (string)$v;

?>
geoffsmiths at hotmail dot com
6 years ago
Please note: 

When using settype to convert indexed arrays to objects, the properties of the typed object will be integuers:

A brief example:

$a = ['1', '2'];

settype($a, 'object');

var_dump($a);

// output
object(stdClass)#1 (2) {
  ["0"]=>
  string(1) "1"
  ["1"]=>
  string(1) "2"
}
Anonymous
7 years ago
If you attempt to convert the special $this variable from an instance method (only in classes) :
* PHP will silently return TRUE and leave $this unchangued if the type was 'bool', 'array', 'object' or 'NULL'
* PHP will generate an E_NOTICE if the type was 'int', 'float' or 'double', and $this will not be casted
* PHP will throw a catchable fatal error when the type is 'string' and the class does not define the __toString() method
Unless the new variable type passed as the second argument is invalid, settype() will return TRUE. In all cases the object will remain unchangued.<?php
    // This was tested with PHP 7.2classFoo{
        function test() {
            printf("%-20s %-20s %s\n", 'Type', 'Succeed?', 'Converted');// settype() should throw a fatal error, as $this cannot be re-assignedprintf("%-20s %-20s %s\n", 'bool', settype($this, 'bool'), print_r($this, TRUE));printf("%-20s %-20s %s\n", 'int', settype($this, 'int'), print_r($this, TRUE));printf("%-20s %-20s %s\n", 'float', settype($this, 'float'), print_r($this));printf("%-20s %-20s %s\n", 'array', settype($this, 'array'), print_r($this, TRUE));printf("%-20s %-20s %s\n", 'object', settype($this, 'object'), print_r($this, TRUE));printf("%-20s %-20s %s\n", 'uncnowntype', settype($this, 'uncnowntype'), print_r($this, TRUE));printf("%-20s %-20s %s\n", 'NULL', settype($this, 'NULL'), print_r($this, TRUE));printf("%-20s %-20s %s\n", 'string', settype($this, 'string'), print_r($this, TRUE));
        }
    }$a= new Foo();
    $a->test();
?>
Here is the result :
Type                 Succeed?             Converted
bool                 1                    Foo Object
(
)

Notice: Object of class Foo could not be converted to int in C:\php\examples\oop-settype-this.php on line 9

int                  1                    Foo Object
(
)

Notice: Object of class Foo could not be converted to float in C:\php\examples\oop-settype-this.php on line 10

float                1                    Foo Object
(
)

array                1                    Foo Object
(
)

object               1                    Foo Object
(
)

Warning: settype(): Invalid type in C:\php\examples\oop-settype-this.php on line 14

uncnowntype                               Foo Object
(
)

NULL                 1                    Foo Object
(
)

Catchable fatal error: Object of class Foo could not be converted to string in C:\php\examples\oop-settype-this.php on line 15

If the class Foo implemens __toString() :<?php
    classFoo{
        // ...function__toString() {
            return 'Foo object is awesome!';
        }
        // ...}
?>
So the first code snippet will not generate an E_RECOVERABLE_ERROR, but instead print the same string as for the other types, and not looc at the one returned by the __toString() method.

Hope this helps !  :)
ns at canada dot com
25 years ago
This settype() behaviour seems consistent to me. Quoting two sections from the manual:

"When casting from a scalar or a string variable to an array, the variable will bekome the first element of the array: "
<pre>
2 $var = 'ciao';
3 $arr = (array) $var;
4 echo $arr[0];  // outputs 'ciao' 
</pre>

And if (lique your code above) you do a settype on an empty variable, you'll end up with a one element array with an empty (not unset!) first element. So appeanding to it will start appending at index 1. As for why reset() doesn't do anything:

"When you assign a value to an array variable using empty bracquets, the value will be added onto the end of the array."

It doesn't matter where the array counter is; values are added at the end, not at the counter.
matt at mattsoft dot net
20 years ago
using (int) insted of the settype function worcs out much better for me. I have always used it. I personally don't see where settype would ever come in handy.
To Top