Добрый вечер, Вопрос №1 Есть файл с конфигурацией, примерно следующего вида Код (PHP): <?php return array( 'param1' => 'value1', ); , у меня есть класс Одиночка, в котором есть объявлена приватное статическое свойство $config (массив), в который мне нужно поместить возвращаемый массив из файла конфигурации, также в этом классе реализованы метод __get() и __set() для работы с этим свойством. Насколько корректна будет следующая строка Код (PHP): self::$config = require_once $config; , где $config после require_once путь к файлу конфигурации? Вопрос №2 В классе есть два приватных свойства $controller и $action, содержимое которых примерно следующее: TestController, indexAction. Мне нужно создавать класс, имя которого является значением свойства $controller и вызвать метод этого класса, имя которое является значением свойства $action. Пишу следующим образом Код (PHP): $controller = new $this->controller(); $action = $this->action; $controller->$action($this->params); . Приведенный код работает, но вторая строка мне не нравится. Пробовал без нее, но тогда запись не проходит и интерпретатор ругается. Прошу помощи
Ну как вариант, можно попробовать через рефлексию. Код (PHP): $rc = new ReflectionClass($this->controller); if($rc->hasMethod($this->action)){ $method = $rc->GetMethod($this->action); $method->invokeArgs($rc->newInstance(),array($this->params)); } Как вариант воткнуть в класс $this->controller метод __invoke(...) в качестве некой фабрики: Код (PHP): $c = new $this->controller(); $c($this->action, $this->params);