将方法分配给 variable/property 的语法

Syntax to assign a method to a variable/property

以下是非常简化的示例。我想知道在 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();

我在这里尝试让开发人员能够将函数发送到 class 到 运行-时间覆盖默认行为。
我完全知道我可以简单地调用 else 中的默认函数,但如前所述,这是一个过度简化的示例。实际上有很多"default"函数。

您可以使用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);
  }

像这样将默认函数作为闭包包含在内

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();
  }
}

你可以这样做:

   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();
          }
        }