PHP - Использование двойного двоеточия с классом переменной

Я пытаюсь вызвать статическую функцию с переменным именем из класса.

Желаемый результат:

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

Я пытаюсь определить новое имя класса внутри текущего класса и вызываю find как статическую функцию из текущей модели. Любые идеи, как это возможно, без создания нового объекта, используя __setили объявление локальной функции в функции?

2 ответа

Решение

Вы не можете сделать это на самом деле. В экземпляре класса вы не можете использовать $this->var ссылаться на другой класс. Вы можете, однако, назначить его другой локальной переменной и получить эту работу

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

Я бы пошел с методом Мачавити, но вы можете использовать call_user_func() или же call_user_func_array():

public function index() {
    $woot = call_user_func_array(array($this->model, 'find'), array(''));
}
Другие вопросы по тегам