callable в PHP

время чтения ~

1 минута

тип или псевдоним в PHP означающий обозначающий всё, что может быть вызвано как функция.

Он применяется:

  • в сигнатурах функций и методов,
  • в типах аргументов,
  • в возвращаемых значениях,
  • в PHPDoc и строгой типизации.

Какие значения считаются callable

PHP считает callable следующие конструкции:

1. Анонимная функция (Closure)

PHP
$fn = function (int $a, int $b): int {
  return $a + $b;
};

2. Стрелочная функция (arrow function)

PHP
$fn = fn(int $x) => $x * 2;

3. Имя функции (string)

PHP
function foo() {}
$fn = 'foo';

4. Статический метод класса (массив)

PHP
$fn = [MyClass::class, 'method'];

5. Метод объекта (массив)

PHP
$fn = [$object, 'method'];

6. Статический метод в строковом виде

PHP
$fn = 'MyClass::method';

7. Объект с методом __invoke()

PHP
class Invokable {
    public function __invoke(int $x): int {
        return $x * 2;
    }
}

$fn = new Invokable();

Использование в типах

Тип аргумента

PHP
function run(callable $callback): void {
  $callback();
}

Возвращаемое значение

PHP
function factory(): callable {
    return fn() => 'Hello';
}

Свойства и параметры конструктора (PHP 7.4+)

PHP
class Service {
public function __construct(
  private callable $logger
  ) {}
}

Проверка: is_callable()

PHP
is_callable($value); // true | false

Важно:

  • is_callable() может вернуть true даже для строки, если функция существует в момент вызова.
  • Статический анализ (PHPStan, Psalm) предпочитает явную типизацию и Closure.