PHP - 使用带有 class 变量的双冒号

PHP - Using a Double colon with a class varible

我正在尝试使用 class 中的变量名称调用静态函数。

期望的结果:

class Controller extends Controller {
    public $model = 'ModelName';
    public function index() {
        $woot = $this->model::find('');
        var_dump($woot);
    }
}

这个有效:

$class = 'ClassName';
$object = $class::find($parameters);

这也有效:

$class = new Model();
$object = $class::find($params);

我正在尝试在当前 class 中定义新的 class 名称,并从当前模型中将查找作为静态函数调用。 在不创建新对象、使用 __set 或在函数中声明局部变量的情况下,有什么想法吗?

实际上你不能那样做。在 class 实例中,您不能使用 $this->var 引用另一个 class。但是,您可以将它分配给另一个局部变量并让它起作用

public function index() {
    $var = $this->model;
    $woot = $var::find('');
    var_dump($woot);
}

我会使用 Machavity 的方法,但您可以使用 call_user_func()call_user_func_array():

public function index() {
    $woot = call_user_func_array(array($this->model, 'find'), array(''));
}