За последние 24 часа нас посетили 22150 программистов и 1682 робота. Сейчас ищут 1728 программистов ...

Вопрос относительно правильности записи кода

Тема в разделе "Вопросы от блондинок", создана пользователем Mr. T, 1 фев 2012.

  1. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Добрый вечер,

    Вопрос №1
    Есть файл с конфигурацией, примерно следующего вида
    Код (PHP):
    1. <?php
    2. return array(
    3.     'param1' => 'value1',
    4. ); 
    , у меня есть класс Одиночка, в котором есть объявлена приватное статическое свойство $config (массив), в который мне нужно поместить возвращаемый массив из файла конфигурации, также в этом классе реализованы метод __get() и __set() для работы с этим свойством. Насколько корректна будет следующая строка
    Код (PHP):
    1. self::$config = require_once $config; 
    , где $config после require_once путь к файлу конфигурации?

    Вопрос №2
    В классе есть два приватных свойства $controller и $action, содержимое которых примерно следующее: TestController, indexAction. Мне нужно создавать класс, имя которого является значением свойства $controller и вызвать метод этого класса, имя которое является значением свойства $action. Пишу следующим образом
    Код (PHP):
    1. $controller = new $this->controller();
    2. $action = $this->action;
    3. $controller->$action($this->params); 
    . Приведенный код работает, но вторая строка мне не нравится. Пробовал без нее, но тогда запись не проходит и интерпретатор ругается.

    Прошу помощи :)
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а использовать статиковый класс для конфига нельзя?
     
  3. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    А Одиночка (Singleton) не статический? :)
     
  4. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Ну как вариант, можно попробовать через рефлексию.

    Код (PHP):
    1. $rc = new ReflectionClass($this->controller);
    2. if($rc->hasMethod($this->action)){
    3.     $method = $rc->GetMethod($this->action);
    4.     $method->invokeArgs($rc->newInstance(),array($this->params));
    5. }
    6.  
    Как вариант воткнуть в класс $this->controller метод __invoke(...) в качестве некой фабрики:
    Код (PHP):
    1. $c = new $this->controller();
    2. $c($this->action, $this->params);
    3.  
     
  5. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Спасибо за наводку на рефлексии, решение мне нравится. Остался вопрос по файлу конфигурации :)
     
  6. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    А что смущает?
    Вполне допустимая обработка возвращаемых значений.
     
  7. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Прежде так не записывал :)