Я пытаюсь вызвать статическую функцию с переменным именем из класса.
Желаемый результат:
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
или объявление локальной функции в функции?
Вы не можете сделать это на самом деле. В экземпляре класса вы не можете использовать $this->var
ссылаться на другой класс. Вы можете, однако, присвоить его другой локальной переменной и получить эту работу
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(''));
}