Metoda __invoke

Magiczna metoda __invoke pozwala instancji klasy na bycie wywołaną jak funkcja. Gdy obiekt jest wywoływany jak funkcja, PHP automatycznie wywołuje tę metodę. Metoda może przyjmować parametry i zwracać wartość, jak zwykła funkcja.

Składnia

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

Przykład

Stwórzmy klasę z metodą __invoke i wywołajmy obiekt jak funkcję:

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

Wynik wykonania kodu:

php'Hello, John!'

Przykład

Użycie __invoke z wieloma parametrami:

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

Wynik wykonania kodu:

php8

Przykład

Sprawdzenie, czy obiekt jest wywoływalny za pomocą 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));
?>

Wynik wykonania kodu:

phpfalse
true

Zobacz też

  • metoda __construct,
    która jest konstruktorem klasy
  • metoda __toString,
    która pozwala obiektowi na bycie reprezentowanym jako ciąg znaków