2015-06-03 3 views
0

Я пытаюсь вызвать статическую функцию с переменным именем из класса.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); 
} 
1

Я пошел бы с помощью метода Machavity «s, но вы можете использовать call_user_func() или call_user_func_array():

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