Метод __invoke

Магическият метод __invoke позволява на инстанция от клас да бъде извикана като функция. Когато обект се извика като функция, PHP автоматично извиква този метод. Методът може да приема параметри и да връща стойност, като обикновена функция.

Синтаксис

phpclass MyClass {
  public function __invoke(...$args) {
    // реализация
  }
}

Пример

Нека създадем клас с метод __invoke и извикаме обекта като функция:

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

Резултат от изпълнението на кода:

php'Hello, John!'

Пример

Използване на __invoke с няколко параметъра:

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

Резултат от изпълнението на кода:

php8

Пример

Проверка дали обект е извикваем с помощта на 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));
?>

Резултат от изпълнението на кода:

phpfalse
true

Вижте също

  • метод __construct,
    който е конструктор на клас
  • метод __toString,
    който позволява на обекта да бъде представен като низ