Il metodo __invoke

Il metodo magico __invoke permette a un'istanza di una classe di essere chiamata come una funzione. Quando un oggetto viene invocato come una funzione, PHP chiama automaticamente questo metodo. Il metodo può accettare parametri e restituire un valore, proprio come una funzione normale.

Sintassi

phpclass MyClass {
  public function __invoke(...$args) {
    // implementazione
  }
}

Esempio

Creiamo una classe con il metodo __invoke e chiamiamo l'oggetto come una funzione:

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

Risultato dell'esecuzione del codice:

php'Hello, John!'

Esempio

Utilizzo di __invoke con più parametri:

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

Risultato dell'esecuzione del codice:

php8

Esempio

Verifica se un oggetto è richiamabile utilizzando 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));
?>

Risultato dell'esecuzione del codice:

phpfalse
true

Vedi anche

  • il metodo __construct,
    che è il costruttore della classe
  • il metodo __toString,
    che permette all'oggetto di essere rappresentato come una stringa