Обходим косяк обфускатора модулей

Углубленное изучение Битрикс
  • Обходим косяк обфускатора модулей

    Антон Долганин 18 Июня 2014 8:07 1989
    Проблему я описал в Идее. Кстати, прошу проголосовать за нее. Но модуль выпускать надо, пришлось искать решение.

    Сделал я следующее. Во первых, создал вспомогательный класс:

    class CASPropVideoHelper { 
        public static function getVarClass($class, $var) {
            return $class->{$var};
        }
        public static function setVarClass(&$class, $var, $val) {
            $class->{$var} = $val;
        }
    }


    Отсюда, установка переменной класса из

    $http->user_agent = 'BxPropVideo Bot www.d-it.ru';


    превратилась в

    CASPropVideoHelper::setVarClass($http, 'user_agent', 'BxPropVideo Bot www.d-it.ru');


    А получение переменной:

    $httpresult = CASPropVideoHelper::getVarClass($http, 'result');


    Это избавило от проблемы обфускации.
Денис
30 Ноября 2016 12:09
Добрый день, Антон!
Столкнулся с аналогичной проблемой при обфускации Битриксом моего кода в модуле.
Сейчас переписываю часть кода, что бы он работал. Ваши статические методы сделал не в отдельном классе, а добавил их в свой класс, что бы можно было устанавливать переменные private и protected. Иначе, Fatal error: Cannot access protected property Foo::$user_agent.

Сейчас думаю либо разнести код на две части (что можно - обфусцировать, что нет - в открытом доступе), либо делать вашим методом.

Насколько ваш метод долговечен? В том плане, что Битрикс возьмет что то поменяет и логика будет нерабочей. И стоит ли под него затачивать свои проекты?


 
Антон Долганин
1 Декабря 2016 7:34
Здравствуйте, Денис.

Мое мнение, что в этом плане ничего не изменится и продолжит работу. Измениться может только что-то глобально в самом PHP со временем.