essentials:first_class_callable_syntax

11. First‑class Callables — Passing Behavior With Clarity

Modern PHP gives us a clean, expressive way to reference methods as values.
First‑class callables let us pass behavior around without strings, arrays, or older callable conventions.

They reflect a broader shift in PHP 8.1+:
behavior should be explicit, typed, and discoverable.


1. What First‑class Callables Are

A first‑class callable is a reference to a
function or method that can be stored,
passed, or invoked later.

$callable = $this->process(...);

This creates a callable object pointing to the process method
— without using strings or array syntax.

It’s clear, modern, and type‑safe.


2. Why Modern PHP Uses Them

First‑class callables reduce:

  • string‑based callables (Class::method)
  • array‑based callables ([$this, 'method'])
  • ambiguity around what is being passed
  • friction when working with higher‑order functions

They make behavior explicit and predictable.


3. The Mental Model

A first‑class callable is a handle to behavior.

It doesn’t execute anything.
It simply points to a method or function that can be invoked later.

The key idea:

  • To use first‑class callables when
    we want to pass behavior,
    not execute an action.

4. A Simple Example

Without first‑class callables:

$handler = [$this, 'process'];

With first‑class callables:

$handler = $this->process(...);

Same meaning.
More clarity.
Better tooling support.


5. When to Use First‑class Callables

Use them when:

  • passing behavior to array functions (array_map, usort)
  • storing behavior for later execution
  • building pipelines or middleware
  • working with event systems
  • we want clarity and type safety

They shine in functional‑style code, pipelines,
and small behavioral abstractions.


6. When Not to Use First‑class Callables

Avoid callables when:

  • the behavior is simple enough to inline
  • the callable hides important logic
  • the abstraction makes the code harder to follow
  • the method reference depends on dynamic context

First‑class callables are for clarity,
not cleverness.


When AI Gets This Wrong

AI often mixes callable styles, using array syntax in one place and first‑class callables in another. Sometimes it creates callables for methods that don’t exist, or uses callables where a simple inline function would be clearer.

Our mental model helps us see when a callable expresses real intent
— and when AI is using it simply because it “looks modern”.


Summary

First‑class callables let us pass behavior with clarity.
They replace older callable patterns, improve type safety,
and make intent explicit.

Once we internalize this,
we can immediately see
when AI‑generated code wrongly:

  • mixes callable styles
  • references methods that don’t exist
  • uses callables unnecessarily
  • or misses opportunities to simplify behavior

First‑class callables are a small feature
— but they teach us how modern PHP wants to express behavior with precision and clarity.


essentials/first_class_callable_syntax.txt · Last modified: by editor