Привязать замыкание к методу класса

У меня есть опыт работы с Python, и теперь я пробую PHP.
Я хочу сделать что-то вроде этого:

    <?php

class Test
{

function __construct($func)
{
$this->build = $func;
}}

$test = new Test(function(){echo "neco";});
$test->build();

//my result
//Fatal error: Call to undefined method Test::build() in C:\Install\web\php\test.php on line 15?>

Но, как вы видите, я получаю ошибку. Есть ли способ получить класс с методом, который зависит от аргумента в качестве закрытия в php?

2

Решение

Вы можете добиться этого путем реализации магической функции __вызов() в вашем Test учебный класс.

__вызов() срабатывает при вызове недоступных методов в
контекст объекта.

public function __call($name, $arguments) {
if($name === 'build') {
$this->build();
}
}

или, с _call()и динамическая отправка:

public function __call($name, $arguments) {
call_user_func_array($this->{$name}, $arguments);
}
0

Другие решения

Да, вы можете сделать это с __invoke(), просто используйте это так:

$test->build->__invoke();

выход:

neco
1

По вопросам рекламы [email protected]