Sling Academy
Home/PHP/PHP callable type: A complete guide

PHP callable type: A complete guide

Last updated: January 10, 2024

Introduction

PHP, a server-side scripting language, has evolved over time to offer developers myriad functions and features to make backend development efficient and powerful. One such feature is the callable type. In this guide, we will explore what a callable is, how to use it in PHP, and delve into some advanced concepts and best practices.

Understanding Callables

A callable, in PHP, refers to anything that can be called as a function. This includes traditional functions, static and non-static class methods, and objects that implement the __invoke() magic method. Callables are versatile and can be used as callbacks, event handlers, or simply as a way to encapsulate code that can be executed later.

Callable Syntax

  • Simple function: 'function_name'
  • Static class method: ['ClassName', 'methodName']
  • Object method: [$object, 'methodName']
  • Anonymous functions (closures): function(...) { ... }

Using Callables in PHP

PHP provides a number of built-in functions that accept callables as arguments. Some of these include array_map(), usort(), array_filter(), and many event-driven extensions.

Example Using array_map()

$numbers = [1, 2, 3, 4];
$squared = array_map(function($number) {
    return $number ** 2;
}, $numbers);
print_r($squared);

This example takes an array of numbers and uses array_map() to apply a callable (in this case, an anonymous function that squares the number) to each element of the array.

Creating Callables

Defining callables can be done in several ways:

Anonymous Function

$greet = function($name) {
    echo "Hello $name!";
};
$greet('World'); // Outputs: Hello World!

Traditional Functions

function greet($name) {
    echo "Hello $name!";
}
call_user_func('greet', 'PHP'); // Outputs: Hello PHP!

Class Methods

class Greeter {
    public static function sayHello($name) {
        echo "Hello $name!";
    }
}

call_user_func(['Greeter', 'sayHello'], 'User'); // Outputs: Hello User!

Type Hinting Callables

Starting with PHP 5.4, you can now type hint a function parameter as callable to indicate that only a callable parameter is expected.

function process(callable $callback) {
    $callback();
}

process(function() { echo 'This is a callable!'; });

Invoking Callables

PHP offers several ways to invoke a callable. The most straightforward method is to call it directly if it’s a function name or anonymous function. For other types of callables, call_user_func() and call_user_func_array() are commonly used:

call_user_func() Example

call_user_func('greet', 'Developer'); // Using function name

call_user_func_array() Example

call_user_func_array(['Greeter', 'sayHello'], ['Reader']); // Using class method

Callable Best Practices

When working with callables:

  • Always validate a callable before execution using is_callable().
  • Consider performance implications of using call_user_func() as direct calls are usually faster.
  • Decouple your code by using callables for event listeners or callback mechanisms.
  • Use type hinting to ensure the functions that you’re writing are getting the correct type of arguments.

The __invoke() Magic Method

PHP allows objects to be invoked as functions by implementing the __invoke() method. Here’s how it works:

class InvokableClass {
    public function __invoke($arg) {
        echo "Invoked with argument $arg";
    }
}

$invokableObject = new InvokableClass();
$invokableObject('Hello'); // Outputs: Invoked with argument Hello

Conclusion

Callables in PHP are a powerful tool for writing flexible and reusable code. Through familiarization with various callable forms, their creation, and invocation, developers can harness callables to produce clean, modular, and efficient applications. It is important to utilize them correctly, keep security in mind, and follow best practices to maximize code quality and maintainability.

Next Article: PHP iterable type: A developer’s guide

Previous Article: PHP Resource type: A practical guide

Series: PHP Data Structure 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