Синтаксис анонимной функции на самом деле компилируется в объект Closure с методом __invoke(). Данный метод позволяет объекту быть вызываемым. Рассмотрим следующий пример с точки зрения функционального программирования:
<?php | |
class Counter { | |
private $_value; | |
public function __construct($init) { | |
$this->_value = $init; | |
} | |
public function increment(): int { | |
return $this->_value++; | |
} | |
public function __invoke() { | |
return $this->increment() | |
} | |
} | |
$c = new Counter(0); | |
$c(); //-> 1 | |
$c(); //-> 2 | |
$c(); //-> 3 |
<?php | |
class Counter { | |
//... | |
public static function increment(int $val): int { | |
return $val + 1; | |
} | |
} | |
Counter::increment(100); //-> 101 |