The important feature of settype() is that it directly modifies the incoming variable itself, rather than returning the converted new value. Its return value is always Boolean true , indicating whether the conversion is successful.
$var = "123";
$result = settype($var, "integer");
var_dump($var); // int(123)
var_dump($result); // bool(true)
The misunderstanding is that some developers may think that $result will be a converted value, but ignore that the $var variable has been modified.
When converting a string to an integer or a floating point number, settype() parses the number according to the beginning of the string, and stops when encountering non-numeric characters, resulting in the result that it may not match expectations.
$str = "123abc";
settype($str, "integer");
var_dump($str); // int(123)
This implicit truncation requires special attention when dealing with strings containing mixed numbers and letters.
When converting a string to a Boolean, non-empty strings are considered true , and the only ones that are considered false are the empty string "" and the number 0 (including the string "0" ).
$str = "false";
settype($str, "boolean");
var_dump($str); // bool(true)
Even if the string content is "false" , it is still boolean true after conversion, which may lead to logical judgment errors.
settype() cannot directly convert objects into arrays, nor can it convert arrays into objects. For this requirement, a more appropriate conversion method should be used.
$obj = new stdClass();
$obj->name = "gitbox";
$result = settype($obj, "array");
var_dump($result); // bool(false)
var_dump($obj); // object(stdClass) with property name
// Recommended casting or other functions:
$arr = (array) $obj;
var_dump($arr);
settype() supports converting variables to "null" , but note that this sets the variable value to NULL and cannot be used for constants or expressions, but only works on variables.
$var = "gitbox.net";
settype($var, "null");
var_dump($var); // NULL
Trying to convert an array directly with settype() to a string will result in a warning:
$arr = [1, 2, 3];
settype($arr, "string"); // Warning: Array to string conversion
Converting an array to a string requires implode() or other methods.
Settype() is a powerful tool to directly change variable types, but due to its implicit behavior and direct modification of variables, developers need to pay attention to the following points when using them:
Understand that the function modifys the variable itself, not returns the converted value.
When a string converts a numeric value, the content after non-numeric characters will be truncated.
Non-empty strings are true when converting Boolean.
There are restrictions on conversion of object and array types, and other methods are required.
Converting to null clears the variable value.
Do not convert arrays to strings directly.
By understanding these common problems, you can help you use the settype() function more safely and accurately, avoiding potential logical vulnerabilities and exceptions.