Задать вопрос
@indefpro
Начинающий прогер

Зачем нужен __invoke и когда его нужно использовать?

Добрый вечер!

Не могу понять зачем и когда нужно использовать __invoke?
  • Вопрос задан
  • 17081 просмотр
Подписаться 2 Средний Комментировать
Решения вопроса 2
@inFureal
Метод __invoke() вызывается, когда скрипт пытается выполнить объект как функцию.

<?php
class CallableClass
{
    public function __invoke($x)
    {
        var_dump($x);
    }
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));
?>


Из официальной документации. Когда вместо вызова метода класса, класс вызывается как функция.
Ответ написан
@bkosun
Метод __invoke() позволяет определить логику работы объекта, при попытке обратиться к нему как к обычной функции. Этот метод может использоваться для передачи класса, который может действовать как замыкание, или просто как функция.

Метод __invoke - это способ, которым PHP может поддерживать функции псевдо-первого класса.

https://ru.wikipedia.org/wiki/%D0%A4%D1%83%D0%BD%D...

Реальный пример:

<?php
class ExampleMiddleware
{
    /**
     * Example middleware invokable class
     *
     * @param  \Psr\Http\Message\ServerRequestInterface $request  PSR7 request
     * @param  \Psr\Http\Message\ResponseInterface      $response PSR7 response
     * @param  callable                                 $next     Next middleware
     *
     * @return \Psr\Http\Message\ResponseInterface
     */
    public function __invoke($request, $response, $next)
    {
        $response->getBody()->write('BEFORE');
        $response = $next($request, $response);
        $response->getBody()->write('AFTER');

        return $response;
    }
}


$subject->add( new ExampleMiddleware() );

www.slimframework.com/docs/v3/concepts/middleware.html

UPD:

https://stackoverflow.com/questions/888064/php-5-3...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы