У меня есть опыт работы с 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?
Вы можете добиться этого путем реализации магической функции __вызов() в вашем Test
учебный класс.
__вызов() срабатывает при вызове недоступных методов в
контекст объекта.
public function __call($name, $arguments) {
if($name === 'build') {
$this->build();
}
}
или, с _call()
и динамическая отправка:
public function __call($name, $arguments) {
call_user_func_array($this->{$name}, $arguments);
}
Да, вы можете сделать это с __invoke()
, просто используйте это так:
$test->build->__invoke();
выход:
neco