PHP: How to get type of a variable at runtime

Updated: January 9, 2024 By: Guest Contributor Post a comment

Overview

Understanding variable types in PHP is crucial for robust application development. PHP provides built-in functions to help developers identify the type of a variable during runtime, seamlessly integrating type checks into the workflow.

Introduction to PHP types

PHP is a loosely typed language where variables
do not need to be declared as certain data types.
However, it is sometimes necessary to know the type of a variable, especially when dealing with functions
that expect certain types or when enforcing data integrity. The functions gettype(), is_type() functions, and the instanceof operator provide ways to get a variable’s type at runtime.

The gettype() Function

The gettype() function is the most direct way to get a variable’s type. This function returns a string representing the type of the variable.

$var = 'Hello, World!';
echo gettype($var); // Outputs: string

It’s straightforward to use and covers basic types like ‘boolean’, ‘integer’, ‘double’ (for floats), ‘string’, ‘array’, ‘object’, ‘resource’, ‘NULL’, and ‘unknown type’.

Handling Complex Types

Sometimes you need more granularity when dealing with objects or resources. In case of objects, the instanceof operator allows you to check if an object is an instance of a specific class or implements an interface.

class MyClass {}
$instance = new MyClass();
var_dump($instance instanceof MyClass); // bool(true)

Type Comparison Functions

PHP offers a range of functions starting with ‘is_’ to check
if a variable is a specified type. These are more useful than gettype() when you need to perform a type check rather than get a string representation of the type.

$num = 5;
var_dump(is_int($num)); // bool(true)

These is_ functions include is_int(), is_float(), is_string(), is_bool(), is_array(), is_object(), is_resource(), and is_null().

Advanced Type Handling

In advanced scenarios where strict types are required or when dealing with more abstract data types, PHP’s Reflection API and type declarations can provide additional tools for type handling at runtime.

function inspectType($var) {
    $reflection = new ReflectionVariable($var);
    return $reflection->getType();
}

The Reflection API can provide insights into the types of class properties, method parameters, and return types, giving developers a powerful toolkit for debugging and type enforcement.

Type Juggling and Casting

Type juggling in PHP is the automatic type conversion based on the context in which a variable is used. While useful, it can sometimes lead to unexpected behavior, so it’s crucial to understand when and how PHP converts types.

$stringNumber = '5';
$actualNumber = $stringNumber + 10;
echo gettype($actualNumber); // Outputs: integer

Explicit type casting, offered by PHP, allows developers to convert one data type to another deliberately using casting operators like (int), (float), (string), etc.

$number = '42';
$castedNumber = (int)$number;
echo gettype($castedNumber); // Outputs: integer

The Importance of Type Systems

Strong typing helps prevent bugs in code by ensuring that the types of values passed around in your application match expectations. As of PHP 7, you can declare strict types to enforce a more reliable type system.

declare(strict_types=1);

function add(int $a, int $b): int {
    return $a + $b;
}

// Throws a TypeError
add('3', '5');

Conclusion

Identifying variable types at runtime is a fundamental aspect of PHP programming. Utilizing gettype(), is_ functions, the instanceof operator, and PHP’s advanced type-declaration features allows developers to write more reliable and maintainable code.