Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > модификация php кода


Автор: NFL 5.2.2015, 21:43
Итак, суть. Есть некий продукт, MVC, много кода, много модулей, и т.д.

Встала необходимость реализовать механизм обновления ядра и модулей.

Ядро обновить не проблема (оно не должно меняться, что понятно, никем кроме разработчика движка)
А вот модули могут изменяться под нужды проекта, а могут и не изменяться.

Задача такова:

Положим, есть что то типа:

Код

<?php
class IndexController {
  public function indexAction(){/*...*/}
  /**
    * @custom
    */
  public function fooAction() {/*...*/}
  public function barAction() {/*...*/}
}


На скрипт обновления заходит php-файл:

Код

class IndexController {
  public function indexAction(){/*.!!!..*/}
  public function fooAction() {/*.!!!..*/}
  public function barAction() {/*.!!!..*/}
}


Задача в том, чтобы обновить (перезаписать) методы indexAction() и barAction(), но проигнорировать fooAction(), т.к. есть аннотация @custom.


Узнать, есть ли аннотация - не проблема. А вот перезаписать метод - не находил подобного в Reflection API. Есть ли что то подобное? Подскажите, знаюшие люди  smile 

Автор: baldina 6.2.2015, 00:11
1. зачем reflection?
2. идея такого обновления не очень. custom может перестать работать после обновления.
3. зачем в модуле изменять класс, если можно создать новый класс, используя стандартный в качестве базового?

Добавлено через 1 минуту и 33 секунды
Цитата(baldina @  6.2.2015,  00:11 Найти цитируемый пост)
1. зачем reflection?

я к тому, что если в исходнике можно найти аннотацию, перезаписать код тоже не проблема

Автор: NFL 7.2.2015, 23:19
1. удобно же
2. это уже внутренняя головная боль) сделать так чтоб не рухнуло 
3. ограничения фреймворка, проект большой, написан на ЗФ1, и переписывать на том же Yii нет ни малейшего желания, да и времени не ахти(
Насколько я знаю ЗФ, там нельзя адекватно заменить один контроллер другим, и вынести действия в файлы (как yii 1.x) тоже нельзя (гугль молчит на эту тему)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)