Método __invoke

El método mágico __invoke permite que una instancia de clase sea invocada como una función. Cuando un objeto se invoca como una función, PHP llama automáticamente a este método. El método puede aceptar parámetros y devolver un valor, como una función normal.

Sintaxis

phpclass MyClass {
  public function __invoke(...$args) {
    // implementación
  }
}

Ejemplo

Creemos una clase con el método __invoke e invoquemos el objeto como una función:

php<?php
  class Greeter {
    public function __invoke($name) {
      return "Hello, $name!";
    }
  }
  
  $greet = new Greeter();
  echo $greet('John');
?>

Resultado de la ejecución del código:

php'Hello, John!'

Ejemplo

Uso de __invoke con múltiples parámetros:

php<?php
  class Calculator {
    public function __invoke($a, $b) {
      return $a + $b;
    }
  }
  
  $calc = new Calculator();
  echo $calc(5, 3);
?>

Resultado de la ejecución del código:

php8

Ejemplo

Comprobando si un objeto es invocable usando is_callable:

php<?php
  class Test {}
  
  $obj1 = new Test();
  $obj2 = new class { public function __invoke() {} };
  
  var_dump(is_callable($obj1));
  var_dump(is_callable($obj2));
?>

Resultado de la ejecución del código:

phpfalse
true

Ver también

  • método __construct,
    que es el constructor de la clase
  • método __toString,
    que permite representar el objeto como una cadena