When developing PHP-based web applications, it’s common to handle user input data. This data might come from form submissions, URL parameters, cookies, and more. Since user input is typically passed as strings, but your program may require it in other data types (such as integers, floats, booleans, etc.) depending on business needs, PHP’s settype() function provides a simple way to perform type conversions.
The settype() function is used to change the type of a variable, directly modifying the variable’s value itself. Unlike type casting, settype() changes the actual type of the variable and returns a boolean value indicating whether the type conversion was successful.
<span><span><span class="hljs-keyword">bool</span></span><span> </span><span><span class="hljs-title function_ invoke__">settype</span></span><span>(</span><span><span class="hljs-keyword">mixed</span></span><span> &</span><span><span class="hljs-variable">$var</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$type</span></span><span>);
</span></span>
$var: The variable to be converted (passed by reference).
$type: The target type, which must be one of: "boolean", "integer", "double", "string", "array", "object".
The settype() function returns a boolean value:
TRUE: Indicates the type conversion was successful.
FALSE: Indicates the type conversion failed, typically when a value cannot be converted to the target type.
User input might be a numeric string, but for mathematical operations, it needs to be converted to an integer or float. For example, a user might enter a number as a price in a form, but we need it as an integer for calculations.
<span><span><span class="hljs-variable">$user_input</span></span><span> = </span><span><span class="hljs-string">"150.75"</span></span><span>; </span><span><span class="hljs-comment">// User input string</span></span><span>
</span><span><span class="hljs-title function_ invoke__">settype</span></span><span>(</span><span><span class="hljs-variable">$user_input</span></span><span>, </span><span><span class="hljs-string">"double"</span></span><span>); </span><span><span class="hljs-comment">// Convert to float</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$user_input</span></span><span>; </span><span><span class="hljs-comment">// Output: 150.75</span></span><span>
</span></span>
When handling form data, especially for checkboxes or radio buttons, users might submit values like “on” or “1” as strings, but we need them as boolean values.
<span><span><span class="hljs-variable">$user_input</span></span><span> = </span><span><span class="hljs-string">"on"</span></span><span>; </span><span><span class="hljs-comment">// Checkbox value from user</span></span><span>
</span><span><span class="hljs-title function_ invoke__">settype</span></span><span>(</span><span><span class="hljs-variable">$user_input</span></span><span>, </span><span><span class="hljs-string">"boolean"</span></span><span>); </span><span><span class="hljs-comment">// Convert to boolean</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$user_input</span></span><span>; </span><span><span class="hljs-comment">// Output: 1 (true)</span></span><span>
</span></span>
Sometimes user input comes in a specific format, such as comma-separated values, and we need to convert it into an array for further processing.
<span><span><span class="hljs-variable">$user_input</span></span><span> = </span><span><span class="hljs-string">"apple,orange,banana"</span></span><span>; </span><span><span class="hljs-comment">// Fruit string from user</span></span><span>
</span><span><span class="hljs-title function_ invoke__">settype</span></span><span>(</span><span><span class="hljs-variable">$user_input</span></span><span>, </span><span><span class="hljs-string">"array"</span></span><span>); </span><span><span class="hljs-comment">// Convert string to array</span></span><span>
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$user_input</span></span><span>); </span><span><span class="hljs-comment">// Output: Array ( [0] => apple [1] => orange [2] => banana )</span></span><span>
</span></span>
In some object-oriented applications, you may need to convert an object into an array for easier transmission or processing of its properties. This can also be done using settype().
<span><span><span class="hljs-class"><span class="hljs-keyword">class</span></span></span><span> </span><span><span class="hljs-title">User</span></span><span> {
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$name</span></span><span>;
</span><span><span class="hljs-keyword">public</span></span><span> </span><span><span class="hljs-variable">$age</span></span><span>;
}
<p></span>$user = new User();<br>
$user->name = "John";<br>
$user->age = 30;</p>
<p>settype($user, "array"); // Convert object to array<br>
print_r($user); // Output: Array ( [name] => John [age] => 30 )<br>
</span>
Although the settype() function offers type conversion, it differs from type casting (e.g., (int)$var). settype() directly changes the variable itself and returns a boolean indicating whether the conversion was successful, while type casting does not change the original variable’s type. Type casting is often preferred for concise code, while settype() is better suited for scenarios where you need to explicitly check if the conversion was successful.
The settype() function modifies the original variable since it is passed by reference. If you don’t want to change the original variable, make a copy of it before performing the conversion.
If the target type conversion fails, settype() does not throw an error but returns FALSE. It’s good practice to check the return value when using it.
When handling user input data, the settype() function is a powerful tool that helps developers easily convert data types. It is suitable for various conversion scenarios, especially when working with form data and external inputs. By using settype(), developers can ensure that the correct data types are used in different business logic contexts, reducing the risk of potential errors or inconsistencies. Always consider checking whether the type conversion is successful before further processing the data.