• Можно ли сделать include в функции php?

    @ZeFearKa
    Возникла ситуация, когда нужно сделать красиво, инклюдить файлы сразу с проверкой пути к файлу, что бы сократить код в других местах. Может кому-то пригодится.

    Вызывается одним действием _file_include($path) или $this->_file_include($path) для класса

    Метод 1. Используется переменная $GLOBALS. Можно задать ключ, например $GLOBALS['custom_variables'] для упрощения доступа к внутренним переменным.
    function _file_include($path) {
      if (!file_exists($path)) {
        return false;
      }
    
      include_once($path);
    
      unset($path);
    
      if (!get_defined_vars()) {
        return;
      }
    
      $GLOBALS[] = array_merge($GLOBALS, get_defined_vars());
    }


    Метод 2 использует возврат в переменную в которую вызывается функция.
    function _file_include($path) {
      if (!file_exists($path)) {
        return false;
      }
    
      include_once($path);
    
      unset($path);
    
      if (!get_defined_vars()) {
        return;
      }
    
      return get_defined_vars();
    }
    $variables = _file_include($path);


    Метод 3 используется только внутри класса
    protected function _file_include($path) {
      if (!file_exists($path)) {
        return false;
      }
    
      include_once($path);
    
      unset($path);
    
      if (!get_defined_vars()) {
        return;
      }
    
      foreach(get_defined_vars() as $key => $value) {
        $this->{$key} = $value;
      }
    }
    Ответ написан
    Комментировать
  • Как решить проблему с написанием модуля на javascript?

    @ZeFearKa Автор вопроса
    Да именно в этом была проблема, я сам разобрался, вот только я все объекты вынес за функцию

    var obj = document.getElementById(id);
    
    if (!obj) return;
    
    var contain = document.createElement('div');
    var internal = document.createElement('div');
    var controls = document.createElement('div');
    var items = obj.getElementsByClassName('mma-carousel__item');


    Как думаете какой вариант правильнее?
    Ответ написан