Sling Academy
Home/PHP/Using Type Hinting in PHP: A Complete Guide

Using Type Hinting in PHP: A Complete Guide

Last updated: January 09, 2024

Introduction

Type hinting in PHP enables developers to specify the expected data type of arguments in function declarations and return types for better code reliability and readability. This guide covers how to effectively use type hinting in your PHP applications.

Basics of Type Hinting

Type hinting, introduced in PHP 5, allows developers to declare the types of function arguments. Here’s a simple example:

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

This code snippet indicates that both $a and $b must be integers, and the function sum should return an integer.

Scalar Type Declarations

With PHP 7, scalar type declarations were introduced, which include types like int, float, string, and bool. For instance:

function multiply(float $a, float $b): float {
    return $a * $b;
}

In this example, multiply expects two float numbers and returns a float.

Strict Typing

PHP has both coercive (default) and strict type checking modes. To enforce strict typing, you need to declare declare(strict_types=1); at the beginning of the file. This ensures that the types are exactly as specified:

declare(strict_types=1);

function divide(int $a, int $b): float {
    if ($b === 0) {
        throw new InvalidArgumentException('Division by zero.');
    }
    return $a / $b;
}

Object Type Declarations

PHP also allows for object types to be specified. Here’s how you would type hint an instance of a hypothetical HttpRequest class:

function handleRequest(HttpRequest $request): Response {
    // process the request
    return new Response();
}

This indicates that handleRequest expects an HttpRequest object and will return a Response object.

Nullable Types

Introduced in PHP 7.1, you can specify that an argument or return type can also be null by prefixing the type with a question mark:

function getUser(int $id): ?User {
    return findUserById($id) ?: null;
}

The function getUser may return a User object or null if no user is found.

Void Return Type

PHP 7.1 also introduced the void return type, indicating that the function does not return any value:

function logMessage(string $message): void {
    file_put_contents('log.txt', $message);
    // no return statement
}

Type Declarations in Methods

Type declarations work similarly in class methods. Here’s an example using a class:

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

Class Calculator has a method add that ensures $a and $b are integers.

Using Type Hinting with Arrays

Array type hinting ensures that a function only receives an array as its argument:

function setValues(array $values): void {
    foreach ($values as $key => $value) {
        // Set each value
    }
}

Iterable and Callable Types

PHP 7.1 introduced the iterable type declaration that allows arrays and instances of Traversable. Similarly, the callable type allows parameters that are callable functions:

function process(iterable $items, callable $callback): void {
    foreach ($items as $item) {
        $callback($item);
    }
}

Property Type Hinting

In PHP 7.4, property type hinting was added, allowing class properties to have type declarations:

class User {
    public int $id;
    public string $name;
}

Union Types in PHP 8

PHP 8 introduced union types, which allows you to declare a variable that can hold multiple types. Here’s an example:

function debugInfo(int|string|bool $data): void {
    var_dump($data);
}

Advanced Type Hinting: Generics with Static Analysis

PHP does not natively support generics; however, you can document generic-like behavior using PHPDoc annotations in combination with static analysis tools, which can help tools understand your code better:

/**
 * @template T
 * @param T $item
 * @return T
 */
function duplicate($item) {
    return $item;
}

Best Practices for Using Type Hinting

  1. Always use type hinting where possible to improve code quality.
  2. Prefer strict typing, especially in large codebases, to prevent subtle bugs.
  3. ElementTypeHint.use_type_hints_consistentlyAcrossYourProject for readability and maintainability.
  4. Keep your PHP version updated to leverage the latest type hinting features.

Conclusion

Type hinting in PHP aids in creating cleaner, more reliable, and maintainable code. By utilizing the tips and practices outlined here, PHP developers can harness the power of type hinting to reduce bugs and improve codebase quality.

Next Article: High Order Functions in PHP: A Practical Guide (6 Examples)

Previous Article: PHP: How to include code from another file

Series: Basic PHP Tutorials

PHP

You May Also Like

  • Pandas DataFrame.value_counts() method: Explained with examples
  • Constructor Property Promotion in PHP: Tutorial & Examples
  • Understanding mixed types in PHP (5 examples)
  • Union Types in PHP: A practical guide (5 examples)
  • PHP: How to implement type checking in a function (PHP 8+)
  • Symfony + Doctrine: Implementing cursor-based pagination
  • Laravel + Eloquent: How to Group Data by Multiple Columns
  • PHP: How to convert CSV data to HTML tables
  • Using ‘never’ return type in PHP (PHP 8.1+)
  • Nullable (Optional) Types in PHP: A practical guide (5 examples)
  • Explore Attributes (Annotations) in Modern PHP (5 examples)
  • An introduction to WeakMap in PHP (6 examples)
  • Type Declarations for Class Properties in PHP (5 examples)
  • Static Return Type in PHP: Explained with examples
  • PHP: Using DocBlock comments to annotate variables
  • PHP: How to ping a server/website and get the response time
  • PHP: 3 Ways to Get City/Country from IP Address
  • PHP: How to find the mode(s) of an array (4 examples)
  • PHP: Calculate standard deviation & variance of an array