php – 从另一个类’$this’调用类的静态方法

我有一些问题.

我想从另一个类调用类的静态方法.

类名称和方法是动态创建的.

做起来并不难:

$class = 'className';
$method = 'method';

$data = $class::$method();

但是,我想这样做

class abc {
    static public function action() {
        //some code
    }
}

class xyz {
    protected $method = 'action';
    protected $class = 'abc';

    public function test(){
        $data = $this->class::$this->method();
    }
}

如果我不将$this->类分配给$class变量,并将$this->方法分配给$method变量,它就不起作用.
有什么问题?

最佳答案 在PHP 7.0中,您可以使用如下代码:

<?php
class abc {
 static public function action() {
  return "Hey";
 }
}

class xyz {
 protected $method = 'action';
 protected $class = 'abc';

 public function test(){
  $data = $this->class::{$this->method}();

  echo $data;
 }
}

$xyz = new xyz();
$xyz->test();

对于PHP 5.6及更低版本,您可以使用call_user_func功能:

<?php
class abc {
 static public function action() {
  return "Hey";
 }
}

class xyz {
 protected $method = 'action';
 protected $class = 'abc';

 public function test(){
  $data = call_user_func([
      $this->class,
      $this->method
  ]);
  echo $data;
 }
}

$xyz = new xyz();
$xyz->test();
点赞