Método __invoke

O método mágico __invoke permite que uma instância de uma classe seja chamada como uma função. Quando um objeto é chamado como uma função, o PHP chama automaticamente este método. O método pode receber parâmetros e retornar um valor, como uma função comum.

Sintaxe

phpclass MyClass {
  public function __invoke(...$args) {
    // implementação
  }
}

Exemplo

Vamos criar uma classe com o método __invoke e chamar o objeto como uma função:

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

Resultado da execução do código:

php'Hello, John!'

Exemplo

Usando __invoke com múltiplos parâmetros:

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

Resultado da execução do código:

php8

Exemplo

Verificando se um objeto é chamável 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 da execução do código:

phpfalse
true

Veja também

  • método __construct,
    que é o construtor da classe
  • método __toString,
    que permite que um objeto seja representado como uma string