Синтаксис для присвоения метода переменной / свойству

Ниже приведен очень упрощенный пример. Мне интересно, возможно ли это в PHP, и если да, какой будет правильный синтаксис.

class A{
private $func = null;

private default_func(){
return $this;
}

public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
else{
$this->func = $this->default_func; ********* NOT WORKING ******
}

}

public function run(){
$this->func();*************** NOT WORKING IF USER DOES NOT GIVE def func
}
}

//NOT WORKING
$C = new A;
$C->run();

//WORKS
$D = new A(function(){echo 1;});
$D->run();

То, что я пытаюсь здесь, дать разработчику возможность отправлять функцию в класс для переопределения поведения по умолчанию.
Я полностью осознаю, что мог бы просто вызвать функцию по умолчанию в else, но, как уже было сказано, это слишком упрощенный пример. В действительности существует много функций по умолчанию.

2

Решение

Включите вашу функцию по умолчанию как замыкание, вот так

class A{
private $func = null;

public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
else{
$this->func = function(){
return $this;
}
}

$this->func();
}
}
1

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

Ты можешь использовать call_user_func() для вызова нужной вам функции. Это должно позволить вам управлять тем, кому вы хотите позвонить.

  public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
else{
$this->func = [$this, 'default_func'];
}

call_user_func($this->func);
}
2

Вы можете сделать так:

   class A{
private $func = null;

private $default_func = function(){
return $this;
}

public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
} else{
$this->func = $this->default_func;
}

$this->func();
}
}

но лучше

        class A{
private $func = function(){
return $this;
};

public function __construct(callable $user_func=null){
if($user_func){
$this->func = $user_func;
}

$this->func();
}
}
2
По вопросам рекламы [email protected]